Alias, taki jak ll
zdefiniowany w alias
poleceniu.
Mogę sprawdzić polecenie za pomocą takich rzeczy, type ll
które drukuje
ll is aliased to `ls -l --color=auto'
lub command -v ll
który drukuje
alias ll='ls -l --color=auto'
lub alias ll
który również drukuje
alias ll='ls -l --color=auto'
ale nie mogę znaleźć miejsca, w którym zdefiniowano alias, tj. pliku takiego jak .bashrc
, a może ręcznie w uruchomionej powłoce. W tym momencie nie jestem pewien, czy to w ogóle możliwe.
Czy powinienem po prostu przejrzeć wszystkie załadowane pliki bash
i sprawdzić każdy z nich?
bash -xl
Odpowiedzi:
Ręczna definicja będzie trudna do wykrycia (być może dzienniki historii), chociaż poprosi powłokę o pokazanie, co robi, a następnie
grep
powinna pomóc znaleźć te ustawione w pliku rc:Jeśli powłoka nie przechwytuje dokładnie niezbędnych opcji za pomocą jednej z powyższych wywołań (które interaktywnie uruchamiają polecenie null), to
script
:Inną opcją byłoby użycie czegoś takiego
strace
lubsysdig
znalezienie wszystkich plików, których dotknie powłoka, a następnie przejście dogrep
nich ręcznie (przydatne, jeśli powłoka lub program nie ma-x
flagi); standardowe pliki RC nie są wystarczające do ręcznego sprawdzenia nazwy pliku, jeśli coś takiego jak oh-my-zsh lub konfiguracje specyficzne dla witryny pobierają kod od tego, kto wie, gdzie (lub też mogą istnieć zmienne środowiskowe, jak wskazuje sorontar w odpowiedzi) .źródło
PS4='+The ll alias is "${BASH_ALIASES["ll"]}" ' bash -ixlc :
Oto, co uważam za
grep -rl
bardzo przydatne:powie ci, w którym pliku
alias
jest użyte słowo .Prawdopodobnie w,
~/.bashrc
a na pewno w,~/.bash_aliases
jeśli istnieje.Nie można jednak mieć absolutnej pewności, że obejmuje to wszystkie opcje. Pliki te mogą także wywoływać lub ładować inne pliki. Zmienna środowiskowa, taka jak ENV lub
$BASH_ENV
może skierować bash, aby załadować inne pliki.Aliasy można nawet zdefiniować, ustawiając zmienną (moje wyróżnienie):
źródło
grep -rl alias ~/.bash*
może fałszywie pasować do plików historii, ale +1 za wskazanie tablicy BASH_ALIASES!Nie znam sposobu, aby wyświetlić listę źródeł twoich aliasów, ale ponieważ wygląda na to, że używasz bash, myślę, że są to możliwe pliki źródłowe:
Powinieneś być w stanie przeszukiwać te, aby znaleźć alias, np
grep 'ls -l --color=auto' /etc/profile ~/.profile /etc/bash.bashrc ~/.bash_profile ~/.bashrc
.źródło
bash -x
, jak już wspomniałeś , potrzebujesz czegoś bardziej złożonego . Uznałem, że powyższe jest dość łatwe do uruchomienia, a jeśli nie znajdzie aliasu, możesz przeczytać kroki wykonania.Łącząc odpowiedź thrig jest z @ sugestią MarkPlotnick jest , można sprawdzić, czy
BASH_ALIASES[ll]
ustawiony jest sprowadzić.BASH_SOURCE
ArrayLINENO
zmienne są tu szczególnie użyteczne. Niestety sprawdzenie, czyBASH_ALIASES[ll]
jest ustawiony, zakończy się powodzeniem dopiero po ustawieniu aliasu, więc pierwsza taka linia może znajdować się w innym pliku.Dając wynik taki jak:
Możesz nawet zakończyć powłokę za pomocą tego sprawdzenia:
źródło
Po prostu odniosłem sukces
which
.źródło
which
potrafi obsługiwać aliasy w tcsh (i może wcześniejszym csh) i zsh, gdzie jest wbudowany, oraz w bash przy użyciu domyślnego profilu w rodzinie RedHat, która ma kludge do uruchomienia (zewnętrznego) programu GNU, ale podaje mu aliasy powłoki, w przeciwnym razie nie . Co ważniejsze, mówi tylko, do czego ustawiony jest alias, a nie tam , gdzie został ustawiony, czyli tutaj Q.Sprawdź ~ / .profile, jeśli nie ma go w ~ / .bashrc
źródło
W końcu znalazłem
ll
definicję aliasu dla naszego serwera WWW (CentOS) w dwóch skryptach powłoki w/etc/profile.d/
:/etc/profile.d/colorls.csh
/etc/profile.d/colorls.sh
Znalazłem go przez pierwsze nauki z powyższych uwag gdzie profil całego systemu było:
/etc/profile
. Ten plik stwierdza, że w systemie są zdefiniowane aliasy systemowe/etc/bashrc
, aw tym pliku widziałem, że przechodzi on przez kilka skryptów powłoki/etc/profile.d/
, więc użyłemgrep
tego katalogu i w końcu znalazłem definicje. Odkryłem również, że istniejel.
alias, który wyświetla wszystkie pliki kropek:Od
colorls.sh
:(Istnieją równoważne aliasy w
colorls.csh
.)źródło
Najpierw użyj następujących poleceń
Wyświetl wszystkie funkcje
Wyświetl wszystkie aliasy
Jeśli nie możesz znaleźć aliasu lub funkcji, rozważ bardziej agresywną metodę wyszukiwania
Wersja Bash
Wersja Zsh
Krótkie objaśnienie opcji
źródło