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...?
bash
alias
bash-alias
javadba
fuente
fuente

PATHenvar.Respuestas:
El
whichcomando 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 quetypees unbashcomando 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
cpuna función, su versión se ejecutará en scripts, aunque no desde otros programas:Si desea
cpque trabaje en todas partes, agregue$HOME/binal principio de suPATHlista y apunte$HOME/bin/cppara 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 laPATHvariable se realizarán en uno de losbashscripts de inicio, con permisos de usuario.fuente
whichque se ejecute/usr/bin/whichcon entrada canalizada desde la salida dealiasy 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/…whichatype. Luegowhich -aopera 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.lnsugerencia 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.
whichno es un Bash incorporado (es un incorporado en otros shells, por ejemplo, zsh). Comowhichno tiene información privilegiada sobre los alias de Bash,whichsolo buscaPATHel término dado.type, por otro lado, es un Bash incorporado, por lo que puede informar sobre alias.fuente