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'
Jason Basanese
źródło
//, 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
heemayl
źródło
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 - ;}

CijcoSistems
źródło
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,