O que é um "s" dentro de "$ -"?

10

Eu normalmente estou bem ciente do conteúdo de $-. Em um recente CentOS, recebo:

[grochmal@orion ~]$ echo $-
himBH

hmBHsão todas opções de sete isignifica que meu shell é interativo.

No entanto, no meu Arch Linux, obtive:

[grochmal@haps ~]$ echo $-
himBHs

Não consigo encontrar nada útil man bashe set -sme dá um erro. O que isso ssignifica?

grochmal
fonte

Respostas:

13

A -sopção é a chamada inicial do bash -s, o que significa "comandos de origem de" entrada padrão ".

-s Se a opção -s estiver presente ou se nenhum argumento permanecer após o processamento da opção, os comandos serão lidos a partir da entrada padrão. Esta opção permite que os parâmetros posicionais sejam definidos ao chamar um shell interativo.

É muito fácil testar:

$ bash -c 'echo $-'
hBc

$ bash -sc 'echo $-'
hBcs

Iniciar um novo shell para todas as versões anteriores do bash não define essa opção por padrão:

$ b32sh -li
$ echo $-
himBH

Mas está no bash 4.4:

$ b44sh -li
$ echo $-
himBHs
Isaac
fonte
E a segunda parte explica por que eu peguei isso no Arch. O valor do meu CentOS para BASH_VERSIONé 4.2.46 (1) -release enquanto no Arch é 4.4.5 (1) -release.
grochmal