Czy można zrobić aliasy sandwicz?


8

Szukam sposobu, aby następujący alias działał dla dowolnej nazwy pliku.

alias dim='cd /home/jason/Documents; vim *the desired file*; cd'

Zastanawiam się, czy istnieje sposób, aby zmienić ten alias, aby był w stanie wpisać dowolną nazwę pliku jako taką:

dim *the desired file*

I wciąż otrzymujesz ten sam wynik. Zasadniczo czy istnieje sposób na wywołanie dowolnego wpisanego po nazwie aliasu samego aliasu? Coś jak:

alias dim='cd /home/jason/Documents; vim <what is typed after alias>; cd'

//, Jaki był tego cel?
Nathan Basanese

Odpowiedzi:


8

Nie, nie możesz tego zrobić za pomocą aliasów powłoki. Musisz użyć funkcji.

Oto prosta funkcja do wykonania zadania:

dim() {
cd /home/jason/Documents
vim "$1"
cd
}

Funkcja dimprzyjmie nazwę pliku jako argument. Możesz umieścić ten fragment kodu na końcu ~/.bashrcpliku, a następnie uruchomić go jako:

dim file.txt

Zastąp file.txtdowolną nazwą pliku, którą chcesz.

Aby uruchomić go z bieżącej sesji powłoki, sourceten ~/.bashrcplik pierwszy:

. ~/.bashrc

3
Co oznacza „1 $”? Jestem początkującym i staram się uczyć, a nie kopiować i wkleić.
Jason Basanese

1
@JasonBasanese Doceniam twoją decyzję :) $1wskazuje pierwszy parametr pozycyjny lub argument funkcji. Pomyśl o tym jako o sposobie wprowadzania danych wejściowych do funkcji lub skryptu .. podobnie jak we wszystkich językach programowania bashrównież to używa .... znaleźć wiele zasobów na ten temat w Google ..
heemayl

3

Nie z aliasami, zamiast tego używaj funkcji.

Ze strony podręcznika użytkownika Bash :

SKRÓTY

[...] Nie ma mechanizmu używania argumentów w tekście zastępczym. Jeśli potrzebne są argumenty, należy użyć funkcji powłoki (patrz FUNKCJE poniżej).

Więc twoją funkcją może być:

funkcja dim () {cd ~ jason / Documents; vim $ *; Płyta CD - ;}


1
Czy w tym przypadku ~ / Dokumenty nie działałyby dobrze? Co również oznaczają symbole $ i * w tym przypadku? i czy - po płycie CD jest potrzebne? Zwykle mogę po prostu wpisać cd i przejdzie do katalogu.
Jason Basanese

„Zwykle mogę po prostu wpisać cd, a to idzie do katalogu” - znam tylko zwykły sposób, cdaby przenieść cię do twojego katalogu domowego; cd ..idzie o jeden poziom wyżej. cd -przeniesie Cię do poprzedniego katalogu, z którego cdedytujesz.
Chriki,

1
@JasonBasanese: Tak ~ / Dokumenty będą działać dla wszystkich (jeśli jest to funkcja dla wszystkich użytkowników). $*to $1 $2 $3...po prostu przekazanie vimowi całej listy, a nie pierwszego wpisanego argumentu. I jak powiedział Chriki, cd -wróci do poprzedniego katalogu (tego, w którym byłeś, kiedy wywołałeś funkcję).
CijcoSistems,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.