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
...?
bash
alias
bash-alias
javadba
fuente
fuente
PATH
envar.Respuestas:
El
which
comando solo devuelve ejecutables: no sabe nada acerca de los alias, ya que es un programa externo y no existe un mecanismo para pasar la información de alias a un proceso secundario.Si ingresa el comando
type -a cp
, verá todas las interpretaciones posibles, en orden de preferencia. Esto incluye cualquier alias, ya quetype
es unbash
comando interno.Es importante darse cuenta de que un alias no será interpretado por un subproceso, como un script o un editor interactivo que tenga la opción de ejecutar comandos del sistema.
Si realiza
cp
una función, su versión se ejecutará en scripts, aunque no desde otros programas:Si desea
cp
que trabaje en todas partes, agregue$HOME/bin
al principio de suPATH
lista y apunte$HOME/bin/cp
para señalarlo:Esto crea un enlace simbólico, aunque puede hacerlo un enlace duro un poco más eficiente (omitir
-s
), pero normalmente necesitará permisos de root (sudo ln ...
). La creación de una función y la adición a laPATH
variable se realizarán en uno de losbash
scripts de inicio, con permisos de usuario.fuente
which
que se ejecute/usr/bin/which
con entrada canalizada desde la salida dealias
y una opción que le dice que lea esa entrada y la use para mostrar un alias si coincide con el mando. Ver unix.stackexchange.com/questions/10525/…which
atype
. Luegowhich -a
opera como el programa externo, con la adición del alias y las definiciones de funciones. En general noalias which=type
, porque me gusta usar$(which ProgName)
cuando quiero forzar el uso de un programa externo, sin pasar por ningún alias o definición de función.ln
sugerencia no simbólica solo funcionará si su directorio de inicio está en el mismo sistema de archivos que/usr/local/bin
. También se comportará de manera extraña si actualizagcp
, ya que su enlace duro probablemente todavía se referirá a la versión anterior.gcp
, dependerá de si la actualización se realiza abriendo y escribiendo o eliminando y volviendo a crear. Tenga en cuenta que es irrelevante si se utiliza una ruta de origen absoluta o relativa para crear un enlace duro, mientras que un enlace simbólico generalmente necesita una ruta absoluta. Los enlaces se usan ampliamente en el sistema operativo, y en su mayoría son simbólicos.Los alias son internos al shell. Otros programas no sabrán sobre ellos.
which
no es un Bash incorporado (es un incorporado en otros shells, por ejemplo, zsh). Comowhich
no tiene información privilegiada sobre los alias de Bash,which
solo buscaPATH
el término dado.type
, por otro lado, es un Bash incorporado, por lo que puede informar sobre alias.fuente