Chcę wiedzieć, czy mogę przekazać argument za pomocą polecenia aliasu.
na przykład:
alias d="dmesg|grep -iw usb|tail -5"
Teraz d
wydrukuje ostatnie 5 wierszy. Jeśli chcę użyć d, aby wydrukować inną liczbę wierszy, muszę ponownie zmienić deklarację polecenia aliasu d
.
Czy jest jakiś sposób, aby zmodyfikować deklarację aliasu, aby nie musiałem ponownie wpisywać deklaracji w celu zmiany liczby wierszy. Jak włączenie przekazywania liczby wierszy jako argumentu podczas deklarowania aliasu d
? Czy jest jakaś inna metoda rozwiązania tego?
command-line
bash
alias
srk_cb
źródło
źródło
Odpowiedzi:
Aliasy nie przyjmują argumentów. Z aliasem podoba
alias foo='bar $1'
The$1
zostanie rozszerzony przez powłokę do pierwszego argumentu powłoki (co jest prawdopodobne, nic), gdy prowadzony jest alias.Więc: Zamiast tego użyj funkcji .
num=${1:-5}
używa pierwszego argumentu, z domyślną wartością 5, jeśli nie jest podany.Następnie możesz zrobić:
Lub jeśli zmienisz nieco użyte opcje:
Następnie możesz przekazać dodatkowe
-n
opcje:Jeśli
-n
podano wiele opcjitail
, używana jest tylko ostatnia.źródło
~/.bashrc
alborc.local
czy gdziekolwiek?Musisz mieć w tym celu funkcję opisaną w pisemnym zgłoszeniu zastrzeżeń i tutaj . Spróbuj wykonać następujące czynności:
i dzwoń do
foo
:źródło
Obejście ograniczeń aliasów za pomocą polecenia grupy i ciągu-tutaj
Aliasy nie mogą przyjmować argumentów, ale możemy to „symulować”. Weźmy na przykład przykład mojej odpowiedzi na to pytanie .
Kluczowe kwestie, które się tutaj dzieją:
read
wbudowanego, aby odczytać ciąg do zmiennejd
. Ponieważ chcemy odczytać pełny ciąg znaków zawierający puste znaki (znaki nowej linii, tabulatory, spacje), używamyIFS=
i wyłączamy znaki ucieczki odwrotnego ukośnika-r
.<<<
który jest tutaj ciągiem znaków pozwala nam przekierować dowolny ciąg znaków, który podamy jako argument domkcd
aliasu; użycie byłoby jakmkcd "some directory"
{ list; }
struktury (co jest znane jakgroup command
wbash
instrukcji). Zauważ, że wymagane są spacje po{
i;
indywidualna lista poleceń.W twoim konkretnym przykładzie możemy zrobić:
Możemy również wykorzystać dzielenie słów do przechowywania argumentów oddzielonych spacją:
Lub możemy użyć tablic, aby podać wiele argumentów:
Ale czy to dobre podejście?
Niekoniecznie. Problem z takim podejściem polega na tym, że jest on bardzo specyficzny - argumentów nie można łatwo cytować, co oznacza, że możemy mieć tylko argumenty bez spacji.
Oczywiście nie jest to coś, co byłoby szeroko stosowane, po prostu dlatego, że w prawdziwym świecie mamy do czynienia ze złożonymi argumentami, więc takie podejście nie jest całkiem praktyczne. Funkcje są znacznie bardziej elastyczne. A potrzeba cytowania ciągów argumentów szybko się denerwuje.
Pomimo ograniczeń, działa to z prostymi ciągami jako argumentami, w których stać nas na dzielenie słów, a zatem częściowo pozwala nam przekazywać argumenty do aliasów.
źródło