bash4.3 # pwd
/bin
bash4.3 # ll sh
lrwxrwxrwx. 1 root root 4 May 17 22:22 sh -> bash
bash4.3 # ll bash
-rwxr-xr-x. 1 root root 1072056 May 17 22:22 bash
bash4.3 # bash
bash4.3 # sh
sh-4.3#
Mi sistema operativo es fedora 24 (versión predeterminada de GNOME).
Por el ejemplo, podemos saber: debajo /bin
, bash
es un ejecutable binario; sh
es un enlace suave a bash
.
Entonces, que yo sepa, type bash and press enter
debería producir el mismo resultado exactamente como type sh and press enter
.
Cuando yo type bash and press enter
, me sale [root@localhost bin]#
como se esperaba.
Sin embargo, si yo type sh and press enter
, sorprendentemente lo entiendo sh-4.3#
.
Cual es la causa
Respuestas:
Esa es una característica documentada.
Si ejecuta bash a través de un enlace simbólico llamado
sh
, bash comenzará ensh
modo de compatibilidad.De
man bash
:¿Cómo sabe un programa qué nombre se usó para iniciarlo?
Si es un programa de CA, puede inspeccionar
argv[0]
. Si es un script de shell o perl, puede inspeccionar$0
.Como ejemplo, consideremos este simple script de shell:
$0
es el nombre con el que se llamó al script.${0##*/}
es el nombre al que se llamó el script con cualquier nombre de directorio eliminado.Creemos este enlace simbólico:
Entonces,
utc
yet
ambos ejecutan el mismo ejecutable pero proporcionan resultados diferentes. Cuando se ejecuta comoutc
, genera tiempo universal. Cuando se ejecuta comoet
, se emite la hora del este de EE. UU. Por ejemplo:fuente
argv[0]
, obvs)