In quanti modi diversi puoi creare un "alias" in Bash?


10

Conosco solo due modi: alias foo=bare function foo() { bar }.

Il motivo per cui lo sto chiedendo è che - all'improvviso in una delle mie sessioni bash - non riesco a eseguire il lncomando perché si bashsta verificando un errore -bash: /usr/local/.../ln: No such file or directory(dove /usr/local/.../è una delle voci nella mia PATHvariabile di ambiente).

PATHTuttavia, non è un problema, perché se eseguo which lnrestituisce il file binario previsto /usr/bin/ln(che posso eseguire correttamente se specifica il percorso assoluto).

Ho anche verificato la lnmia aliase le functiondichiarazioni, e non c'è nulla:

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

Il problema si sta verificando in una sessione bash. Se avvio una nuova shell, funziona di nuovo bene, ma voglio sapere cosa ha causato questo problema all'improvviso in questa particolare sessione di bash.

Qualche idea su cosa potrebbe causare questo?

Risposte:


10

Fare attenzione quando si utilizza il whichcomando. Meglio usare il type ...comando.

$ type ln
ln is /bin/ln

Puoi anche usare il whereiscomando:

$ whereis ln
ln: /bin/ln /usr/share/man/man1p/ln.1p.gz /usr/share/man/man1/ln.1.gz

Hai ragione! Quando corro type lnvedo ln is hashed (/usr/local/.../ln)quale sembra essere il problema, ma cosa significa esattamente che è "hash"? Non ho mai sentito parlare di quella caratteristica in Bash.
Eterice,

3
@etherice - Bash mantiene un hash (una chiave = lista valori) del nome di un comando e dove si trova. Puoi vedere l'elenco con il hash -lcomando. È creato dinamicamente mentre usi i comandi.
slm

@etherice - Ho appena votato per la tua domanda, quindi sei solo a 4 punti di distanza Cool. Puoi accettare la risposta quando il problema è stato risolto e ritieni che sia la risposta migliore.
slm

@etherice - qualcun altro ti ha appena votato, quindi ora hai 16 punti.
slm

1
Grazie! Ho corso hash -rper ripristinare la tabella hash command-to-path, e ora lnè tornato a funzionare.
etherice
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.