La última línea de mi .bash_profile
es:
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 which
comando 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 cp
verás todas las interpretaciones posibles, en orden de preferencia. Esto incluye cualquier alias, ya que type
es un bash
comando 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 cp
una función, su versión se ejecutará en scripts, aunque no desde otros programas:
cp() { /usr/local/bin/gcp "$@"; }
Si desea cp
que funcione en todas partes, agregue $HOME/bin
al principio de su PATH
lista 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 PATH
variable se realizará en uno de los bash
scripts de inicio, con permisos de usuario.
Respuesta2
Los alias son internos al shell. Otros programas no sabrán sobre ellos.
which
no es una función incorporada de Bash (es una función incorporada en algunos otros shells, por ejemplo, zsh). Dado que which
no tiene información privilegiada sobre los alias de Bash, which
simplemente busca PATH
el término dado.
type
, por otro ladoesun Bash incorporado, por lo que puede informar sobre alias.