Jak zobaczyć polecenie dołączone do aliasu bash?

324

Załóżmy, że mam alias w powłoce bash. Czy istnieje proste polecenie do wydrukowania, które polecenie zostanie uruchomione przez alias?

Casebash
źródło

Odpowiedzi:

431

typeWbudowane jest przydatna dla. Informuje nie tylko o aliasach, ale także funkcjach, wbudowanych funkcjach, słowach kluczowych i poleceniach zewnętrznych.

$ type ls
ls is aliased to `ls --color=auto'
$ type rm
rm is /bin/rm
$ type cd
cd is a shell builtin
$ type psgrep
psgrep is a function
psgrep () 
{ 
    ps -ef | { 
        read -r;
        printf '%s\n' "$REPLY";
        grep --color=auto "$@"
    }
}

type -a cmdpokaże wszystkie polecenia według tej nazwy w kolejności pierwszeństwa, co jest przydatne dla lspowyższego aliasu, do którego wywołuje sam alias ls.

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls

Mówi ci to, że kiedy uruchomisz ls, /bin/lszostanie użyty i --color=autobędzie uwzględniony na liście argumentów, oprócz innych, które sam dodasz.

geirha
źródło
co zrobić, gdy alias zawiera WIĘCEJ aliasów?
user251046
2
@ user251046 używaj dalej, typeaż trafisz na coś innego niż alias ...
geirha
Podoba mi się ta odpowiedź, ponieważ typeanalizuje / interpretuje wszelkie cytaty, dzięki czemu możesz się upewnić, że cytaty są poprawne.
wisbucky,
Mam ls is aliased to 'ls --color=auto', ale jak mogę uzyskać jedną warstwę głębiej, aby zobaczyć, czy używa / bin / ls lub / usr / local / bin / ls, czy co?
krubo
1
@krubo type -a lspokaże wszystkie polecenia ls znalezione w kolejności preferencji. Cokolwiek znajduje się bezpośrednio pod aliasem, to to, które zostanie wykonane przez alias.
geirha
163

Wystarczy wpisać aliasw wierszu poleceń powłoki. Powinien wyświetlić listę wszystkich aktualnie aktywnych aliasów.

Możesz też wpisać, alias [command]aby zobaczyć, do jakiego aliasu jest alias, na przykład, jeśli chcesz dowiedzieć się, do którego lsaliasu został alias, możesz to zrobić alias ls.

Thomas Ward
źródło
12
Lub wpisz, alias lsaby dowiedzieć się, do czego konkretnie lsjest alias.
poolie
2
@poolie Rzeczywiście. Myślę, że chodziło o to, aby zobaczyć wszystkie aliasy, dlatego nie rozwinąłem dalej komendy o aliasie.
Thomas Ward
chociaż działa to w przypadku aliasów, nie działa, jeśli zdefiniowano niestandardową funkcję powłoki. typejednak działa w obu przypadkach.
Sujay Phadke
53

Naprawdę podoba mi się Ctrl+ Alt+, Ejak dowiedziałem się z tej odpowiedzi . „Rozszerza” aktualnie wpisany wiersz poleceń, co oznacza, że ​​wykonuje rozwinięcie aliasu (między innymi).

Co to znaczy? Zmienia dowolny alias, który może być obecnie zapisany w wierszu poleceń, w to, co oznacza alias.

Na przykład, jeśli napiszę:

$ ls

a następnie naciśnij Ctrl+ Alt+ E, zmieni się w

$ ls --time-style=locale --color=auto
Der Hochstapler
źródło
czy to odpowiednik w innych dystrybucjach?
sepehr
@sepehr Działa na Debianie, zakładam, że jest to funkcja bash i powinna działać na każdej dystrybucji.
Der Hochstapler
4
masz rację, działa na bash, ale mam Zsh i niestety nie działa.
sepehr
było naprawdę pomocne. Innym celem było rozszerzenie jednego z poprzednich poleceń bash zapisanych w historii, tj.! 394, aby móc go najpierw edytować przed uruchomieniem
XXL
1
Ma jedno zastrzeżenie. Gdy alias zawiera niezbędne cudzysłowy, zostaną one usunięte. Tak więc dostaję squeue -u davidmh -o %.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R zamiastsqueue -u davidmh -o "%.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R "
Davidmh
10

Ściśle mówiąc poprawną odpowiedzią jest użycie tablicy BASH_ALIASES, np .:

$ echo ${BASH_ALIASES[ls]}
ls -F --color=auto --show-control-chars
noonex
źródło
2
Uznałem to za przydatne w sytuacji, w której chciałem zautomatyzować dostęp do faktycznego aliasu, bez otaczających go elementów przydatnych dla ludzi.
M. Justin,
to nie działa w
Zsh
1
@ProGrammar pytanie dotyczyło bash - dla zsh powinieneś szukać pytań na temat zsh
noonex
1
Bingo Dokładnie to, czego potrzebowałem, tak samo jak @ M.Justin - chcę umieścić więcej przełączników na bieżącym lsaliasie bez zmiany tego, co tam jest. Więc idę alias ls="${BASH_ALIASES[ls]} --time-style=iso"po moją sprawę.
Bogaty
2

Możesz użyć whichpolecenia.

Jeśli ustawisz alias dla lsas, ls -ala następnie wpisz which ls, zobaczysz:

ls: aliased to ls -al.

użytkownik312471
źródło
bash nie ma whichpolecenia.
geirha
Nie działa dla mnie ..
Chiel ten Brinke
2
whichto zły sposób na wyszukiwanie aliasów, jak wyjaśniono tutaj: unix.stackexchange.com/questions/10525/... To nawet nie działa dla mnie dla aliasów w bash na Ubuntu.
Sujay Phadke