Jak znaleźć fałszywą deklarację aliasu?


37

Próbuję znaleźć miejsce, w którym określony aliaszostał zadeklarowany. Przeszukałem wszystkie zwykłe miejsca, które znam, aby szukać aliasów:

  • ~ / .bashrc
  • ~ / .bash_profile
  • / etc / bashrc
  • / etc / profile

Bez powodzenia.

Wiem, że to aliasdlatego, że kiedy to robię which COMMAND, otrzymuję:

alias COMMAND='/path/to/command'
    /path/to/command

Czy istnieje sposób, aby znaleźć plik, który deklaruje aliasznajomość tylko aliasnazwy?


3
Pokrewnych pytanie o zmiennych środowiskowych zamiast aliasów. Zasadniczo nie ma łatwego sposobu, ponieważ alias można ustawić w dowolnym miejscu. Spróbuj umieścić set -xjak sugerowano u góry i sprawdź, czy to Ci w tym nie zawęzi.
jw013

1
Musisz umieścić set -xna górze /etc/bash_profilelub /etc/bashrc. Dlaczego po prostu nie uruchomić bash -i -xlub bash -l -x?
Mikel

Odpowiedzi:


30

Chciałbym spojrzeć w /etc/profile.d/za przestępstwa alias.

Możesz również wykonać następujące czynności, aby go znaleźć:

grep -r '^alias COMMAND' /etc

Spowoduje to rekurencyjne grepprzechodzenie przez pliki szukające linii zaczynającej się od alias COMMAND.

Jeśli wszystko inne zawiedzie, połóż to na końcu swojego ~/.bashrc

unalias COMMAND

26

Jest kilka rzeczy, które możesz wypróbować:

  1. użyj, bash -vaby zobaczyć, które linie są odczytywane podczas uruchamiania powłoki
  2. Użyj, bash -xaby zobaczyć, jakie polecenia są uruchamiane podczas uruchamiania powłoki
  3. uruchom tylko z jednym plikiem startowym

bash -v

Ta -v opcja powoduje bashwydrukowanie każdej linii z każdego pliku skryptu, który czyta podczas czytania.

Zacznij od uruchomienia

bash -i -v >bash-i.out 2>&1

poczekaj 5-10 sekund, a następnie naciśnij Ctrl+C.

To da ci pojedynczy plik o nazwie, bash-i.outktóry jest jak wszystkie twoje pliki startowe scalone (lub połączone) razem.

Następnie użyj, lessaby otworzyć plik i wyszukać alias za pomocą /aliasname.

Teraz porównaj, gdzie pojawia się ten alias w stosunku do innych linii w pliku. Na przykład w większości systemów /etc/bash.bashrcma na górze komentarz, który mówi /etc/bash.bashrci też ~/.bashrcma jeden.

Jeśli jest nad twoim ~/.bashrc, to prawdopodobnie jest to plik startowy, /etcktóry definiuje alias, w przeciwnym razie znajduje się w twoim ~/.bashrclub w pliku, który zawiera za pomocą sourcelub .(polecenie kropki).

Jeśli to nie pokazuje aliasu, spróbuj

bash -l -v >bash-l.out 2>&1

Mówi to, że bash jest powłoką logowania, która odczytuje na przykład różne pliki startowe, /etc/profilea ~/.bash_profilezamiast /etc/bash.bashrci ~/.bashrc.

bash -x

Jeśli bash -vnie da ci jednoznacznej odpowiedzi, spróbuj uruchomić bash -x, która wypisuje polecenia uruchomione przez powłokę, a nie wiersze, które odczytuje powłoka.

Metoda jest w zasadzie taka sama jak powyżej, z wyjątkiem zmiany -vna -x. (W razie potrzeby możesz używać obu razem.)

Uruchom tylko z jednym plikiem startowym

bash -i --rcfile="$HOME/.bashrc"

i sprawdź, czy masz alias.

Spróbuj tego samego z rcfileustawieniem, /etc/bash.bashrcjeśli twój system go posiada.

Więc spróbuj

bash -l --rcfile="$HOME/.bash_profile"

i rób to samo z każdym plikiem startowym bash, który ma profilew swojej nazwie, np. zmień $HOME/.bash_profilena /etc/profile.

Niezależnie od tego, w jaki sposób pojawi się alias, zobaczysz plik, od którego powinieneś zacząć szukać.


2

Może twoja .xinitrc? Powinieneś również sprawdzić, czy Twoje .bashrclub .bash_profileźródła innych plików w nich. Na przykład przechowuję wszystkie moje aliasy w osobnym pliku, do którego odwołuje się to polecenie:

[ -f ~/.bash_alias ] && source $HOME/.bash_alias

Kilka pytań, które mogą również pomóc: Czy dotyczy to zwykłego użytkownika lub użytkownika root? Które to polecenie? Jaki smak Linuksa?


0

Stosuję się do bardzo powszechnej praktyki wprowadzania moich definicji aliasów

~/.bash_aliases

a następnie wywołanie tego z .bashrc za pomocą

[ -f ~/.bash_aliases ] && source $HOME/.bash_aliases

czy mogę zgadywać, że masz na myśli .bash_aliases w drugim poleceniu zamiast .bash_alias?
stagl
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.