¿De cuántas maneras diferentes puedes crear un "alias" en Bash?

10

Solo sé de dos maneras: alias foo=bary function foo() { bar }.

La razón por la que pregunto es que, de repente en una de mis sesiones de bash, no puedo ejecutar el lncomando porque se bashestá produciendo un error con -bash: /usr/local/.../ln: No such file or directory(donde /usr/local/.../es una de las entradas en mi PATHvariable de entorno).

Sin PATHembargo, no es un problema, porque si ejecuto which lngenera el binario esperado de /usr/bin/ln(que puedo ejecutar bien si especifico la ruta absoluta).

También verifiqué lnen mi aliasy functiondeclaraciones, y no hay nada:

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

El problema solo ocurre en una sesión bash. Si inicio un nuevo shell, vuelve a funcionar bien, pero quiero saber qué causó este problema de repente en esta sesión particular de bash.

¿Alguna idea de lo que podría estar causando esto?

etherice
fuente

Respuestas:

10

Tenga cuidado al usar el whichcomando. Es mejor usar el type ...comando.

$ type ln
ln is /bin/ln

También puedes usar el whereiscomando:

$ whereis ln
ln: /bin/ln /usr/share/man/man1p/ln.1p.gz /usr/share/man/man1/ln.1.gz
slm
fuente
¡Tienes razón! Cuando corro type lnme sale ln is hashed (/usr/local/.../ln)cuál parece ser el problema, pero ¿qué significa exactamente que es "hash"? Nunca he oído hablar de esa característica en bash.
etherice
3
@etherice: Bash mantiene un hash (una clave = lista de valores) del nombre de un comando y su ubicación. Puedes ver la lista con el hash -lcomando. Se construye dinámicamente a medida que usa los comandos.
slm
@etherice: acabo de votar tu pregunta para que estés a solo 4 puntos de distancia 8-). Puede aceptar la respuesta cuando se resuelva su problema y considere que es la mejor respuesta.
slm
@etherice: hay alguien más que te ha votado, así que ahora tienes 16 pts.
slm
1
¡Gracias! Corrí hash -rpara restablecer la tabla hash de comando a ruta, y ahora lnvuelvo a funcionar.
etherice