Что такое «s» внутри «$ -»?

10

Я обычно хорошо осведомлен о содержании $-. На недавнем CentOS я получаю:

[grochmal@orion ~]$ echo $-
himBH

hmBHвсе варианты от set, и iозначает, что моя оболочка является интерактивной.

Тем не менее, на моем Arch Linux я получил:

[grochmal@haps ~]$ echo $-
himBHs

Я не могу найти ничего полезного man bashи set -sвыдает ошибку. Что это sозначает?

grochmal
источник

Ответы:

13

-sВариант начало Баша вызов с -s, что означает «источник команду из„стандартных в разделе “От ручной.:

-s Если присутствует опция -s или если после обработки опции не осталось аргументов, команды считываются из стандартного ввода. Эта опция позволяет устанавливать позиционные параметры при вызове интерактивной оболочки.

Это очень легко проверить:

$ bash -c 'echo $-'
hBc

$ bash -sc 'echo $-'
hBcs

Запуск новой оболочки для всех предыдущих версий bash не устанавливает эту опцию по умолчанию:

$ b32sh -li
$ echo $-
himBH

Но это в Bash 4.4:

$ b44sh -li
$ echo $-
himBHs
Исаак
источник
И вторая часть объясняет, почему я получил это на Arch. Мое значение CentOS для BASH_VERSION4.2.46 (1) -релиза, в то время как на Arch это 4.4.5 (1) -релиз.
grochmal