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#
Mon OS est fedora 24 (version GNOME par défaut).
D'après l'exemple, nous pouvons savoir: under /bin
, bash
est un exécutable binaire; sh
est un lien logiciel vers bash
.
Donc, à ma connaissance, type bash and press enter
devrait avoir exactement le même résultat type sh and press enter
.
Quand je type bash and press enter
, je reçois [root@localhost bin]#
comme prévu.
Cependant, si je le fais type sh and press enter
, je l'obtiens étonnamment sh-4.3#
.
Quelle en est la cause?
Réponses:
C'est une fonctionnalité documentée.
Si vous exécutez bash via un lien symbolique nommé
sh
, bash démarrera ensh
mode de compatibilité.De
man bash
:Comment un programme sait-il quel nom a été utilisé pour le démarrer?
S'il s'agit d'un programme alternatif, il peut inspecter
argv[0]
. S'il s'agit d'un script shell ou perl, il peut l'inspecter$0
.À titre d'exemple, considérons ce script shell simple:
$0
est le nom par lequel le script a été appelé.${0##*/}
est le nom que le script a été appelé sans aucun nom de répertoire.Créons ce lien symbolique:
Ainsi,
utc
et leset
deux exécutent le même exécutable mais ils fournissent des résultats différents. Lorsqu'il est exécuté en tant queutc
, il génère un temps universel. Lorsqu'il est exécuté en tant queet
, il affiche l'heure de l'Est américain. Par exemple:la source
argv[0]
, obvs)