¿Alias ​​no "anula" las entradas de RUTA?

¿Alias ​​no "anula" las entradas de RUTA?

La última línea de mi .bash_profilees:

alias cp=/usr/local/bin/gcp

Sin embargo, eso está siendo aplastado por la entrada en mi $PATH:

$which cp
/bin/cp
11:54:32/OCspark $type cp
cp is aliased to `/usr/local/bin/gcp'

Pensé que los alias anulan el PATH...

Respuesta1

El whichcomando devuelve solo ejecutables: no sabe nada sobre alias, ya que es un programa externo y no existe ningún mecanismo para pasar información de alias a un proceso hijo.

Si ingresas el comando type -a cpverás todas las interpretaciones posibles, en orden de preferencia. Esto incluye cualquier alias, ya que typees un bashcomando interno.

Es importante tener en cuenta que un alias no será interpretado por un subproceso, como un script o un editor interactivo que tenga una opción para ejecutar comandos del sistema.

Si crea cpuna función, su versión se ejecutará en scripts, aunque no desde otros programas:

cp() { /usr/local/bin/gcp "$@"; }

Si desea cpque funcione en todas partes, agregue $HOME/binal principio de su PATHlista y señale $HOME/bin/cp:

ln -s /usr/local/bin/gcp $HOME/bin/cp

Esto crea un enlace simbólico, aunque puede convertirlo en un enlace físico un poco más eficiente (omitir -s), pero normalmente necesitará permisos de root ( sudo ln ...). La creación de una función y su adición a la PATHvariable se realizará en uno de los bashscripts de inicio, con permisos de usuario.

Respuesta2

Los alias son internos al shell. Otros programas no sabrán sobre ellos.

whichno es una función incorporada de Bash (es una función incorporada en algunos otros shells, por ejemplo, zsh). Dado que whichno tiene información privilegiada sobre los alias de Bash, whichsimplemente busca PATHel término dado.

type, por otro ladoesun Bash incorporado, por lo que puede informar sobre alias.

información relacionada