Co to jest „s” wewnątrz „$ -”?

10

Zazwyczaj dobrze wiem o zawartości $-. W ostatnim CentOS otrzymuję:

[grochmal@orion ~]$ echo $-
himBH

hmBHsą wszystkie opcje z seti ioznacza, że ​​moja powłoka jest interaktywna.

Jednak na moim Arch Linux dostałem:

[grochmal@haps ~]$ echo $-
himBHs

Nie mogę znaleźć niczego przydatnego man bashi wyświetla set -smi błąd. Co to soznacza?

grochmal
źródło

Odpowiedzi:

13

-sRozwiązaniem jest wezwanie początek z bash -s, co oznacza „źródło poleceń od«standardowego in»z podręcznika.:

-s Jeśli opcja -s jest obecna lub jeśli po przetworzeniu opcji nie pozostały żadne argumenty, polecenia są odczytywane ze standardowego wejścia. Ta opcja umożliwia ustawienie parametrów pozycyjnych podczas wywoływania powłoki interaktywnej.

Bardzo łatwo jest przetestować:

$ bash -c 'echo $-'
hBc

$ bash -sc 'echo $-'
hBcs

Uruchomienie nowej powłoki dla wszystkich poprzednich wersji bash nie ustawia domyślnie tej opcji:

$ b32sh -li
$ echo $-
himBH

Ale jest w bash 4.4:

$ b44sh -li
$ echo $-
himBHs
Izaak
źródło
A druga część wyjaśnia, dlaczego dostałem to na Arch. Wartość mojego CentOS dla BASH_VERSIONto 4.2.46 (1) -release, podczas gdy na Arch jest to 4.4.5 (1) -release.
grochmal