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?

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.


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.


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

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

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

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.