Qu'est-ce qu'un «s» à l'intérieur de «$ -»?

10

Je connais normalement bien le contenu de $-. Sur un CentOS récent, je reçois:

[grochmal@orion ~]$ echo $-
himBH

hmBHsont toutes des options de set, et isignifie que mon shell est interactif.

Pourtant, sur mon Arch Linux, j'ai eu:

[grochmal@haps ~]$ echo $-
himBHs

Je ne trouve rien d'utile man bashet set -sme donne une erreur. Qu'est-ce que cela signifie s?

grochmal
la source

Réponses:

13

L' -soption est l'appel de démarrage bash avec -s, ce qui signifie "commandes source à partir de" standard dans ".

-s Si l'option -s est présente ou s'il ne reste aucun argument après le traitement de l'option, les commandes sont lues à partir de l'entrée standard. Cette option permet de définir les paramètres positionnels lors de l'appel d'un shell interactif.

Il est très facile de tester:

$ bash -c 'echo $-'
hBc

$ bash -sc 'echo $-'
hBcs

Le démarrage d'un nouveau shell pour toutes les versions bash précédentes ne définit pas cette option par défaut:

$ b32sh -li
$ echo $-
himBH

Mais c'est dans bash 4.4:

$ b44sh -li
$ echo $-
himBHs
Isaac
la source
Et la deuxième partie explique pourquoi j'ai eu ça sur Arch. La valeur de mon CentOS BASH_VERSIONest de 4.2.46 (1) -release tandis que sur Arch est-ce 4.4.5 (1) -release.
grochmal