Ile różnych sposobów możesz utworzyć „alias” w Bash?

10

Znam tylko dwa sposoby: alias foo=bari function foo() { bar }.

Powód, dla którego pytam, jest taki - nagle w jednej z moich sesji bash - nie mogę uruchomić lnpolecenia, ponieważ bashwystępuje błąd -bash: /usr/local/.../ln: No such file or directory(gdzie /usr/local/.../jest to jeden z wpisów w mojej PATHzmiennej środowiskowej).

Nie jest to jednak PATHproblem, ponieważ jeśli uruchomię which ln, wyświetli oczekiwany plik binarny /usr/bin/ln(który mogę uruchomić poprawnie, jeśli podam ścieżkę bezwzględną).

Ja również sprawdzić lnw moich aliasand functiondeklaracji, a nie ma nic:

$ declare -f | grep ln
$ alias | grep ln

Problem występuje tylko w jednej sesji bash. Jeśli uruchomię nową powłokę, to znowu działa dobrze, ale chcę wiedzieć, co spowodowało ten problem nagle w tej jednej sesji bash.

Wszelkie pomysły na to, co może być tego przyczyną?

eteryczne
źródło

Odpowiedzi:

10

Zachowaj ostrożność podczas korzystania z whichpolecenia. Lepiej użyć type ...polecenia.

$ type ln
ln is /bin/ln

Możesz także użyć whereispolecenia:

$ whereis ln
ln: /bin/ln /usr/share/man/man1p/ln.1p.gz /usr/share/man/man1/ln.1.gz
slm
źródło
Masz rację! Kiedy uruchamiam type ln, rozumiem, ln is hashed (/usr/local/.../ln)co wydaje się być problemem, ale co to znaczy dokładnie, że jest „zakodowane”? Nigdy nie słyszałem o tej funkcji w bash.
eterice
3
@etherice - Bash utrzymuje hash (klucz = lista wartości) nazwy polecenia i jego lokalizacji. Możesz zobaczyć listę z hash -lpoleceniem. Jest dynamicznie zbudowany podczas używania poleceń.
slm
@ eterice - Właśnie przegłosowałem twoje pytanie, więc dzieli Cię tylko 4 punkty 8-). Możesz zaakceptować odpowiedź, gdy problem zostanie rozwiązany i uważasz, że to najlepsza odpowiedź.
slm
@etherice - ktoś jeszcze cię ocenił, więc teraz masz 16 pkt.
slm
1
Dzięki! Pobiegłem, hash -raby zresetować tablicę skrótów polecenia-do-ścieżki, i lnwróciłem do stanu gotowości.
eterice