printf %s\\n "$-"
Wyświetli listę opcji z jedną literą w jednym ciągu.
Tego parametru można również użyć w następujący sposób:
set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"
Aby najpierw wyłączyć -f
rozszerzanie nazwy powłoki , jednocześnie zapisując wartość dla $-
- jeśli w ogóle - w $1
. Następnie nie występują globusy, a ostatnie +f
rozszerzenie nazwy jest ponownie włączone, a być może również wyłączone.
Na przykład, jeśli -f
rozszerzenie nazwy pliku było już wyłączone, gdy wartość parametru $-
została zapisana po raz pierwszy, wówczas jego zapisaną wartością byłoby (przynajmniej) :
f
Dlatego po set
ponownym uruchomieniu działa:
set +f -f
Co po prostu przywraca Cię do początku.
set +o
Wyświetli listę wszystkich set
opcji powłoki tabeli (patrz odpowiedź Jasona dla shopt
możliwości - czy to słowo? - opcje) w formie, która jest bezpieczna dla ponownego wejścia powłoki. W ten sposób możesz także:
state=$(set +o)
set -some -crazy -options
eval "$state"
Aby odpowiednio zapisać, zmienić i przywrócić stan opcji powłoki.
Aby obsłużyć shopt
jony i set
opcje tabeli za jednym razem:
state=$(set +o;shopt)
#do what you want with options here
eval "$state"
Możesz także wywoływać set
bez żadnych argumentów, aby dodać listę wszystkich aktualnie ustawionych zmiennych powłoki - również cytowanych w celu ponownego wejścia do powłoki. I możesz - w bash - dodatkowo dodać polecenie, typeset -fp
aby uwzględnić również wszystkie aktualnie zadeklarowane funkcje powłoki. Możesz zebrać wszystko razem i eval
kiedy będziesz gotowy. Możesz nawet zadzwonić alias
bez argumentów, aby uzyskać więcej tego samego. To ... może to jednak pokryć. Wydaje mi się, że istnieje "$@"
- którą prawdopodobnie musiałbyś najpierw umieścić w bash
tablicy, zanim to zrobisz set
.
Nie, jest też trap
. Ten jest trochę zabawny. Zwykle:
trap 'echo this is my trap' 0
(echo this is my subshell; trap)
... po prostu wydrukuje to jest moja podpowłoka, ponieważ podpowłoka jest nowym procesem i pobiera własny zestaw trap
s - a więc nie dziedziczy żadnych trap
s, ale te, które jego rodzic wyraźnie zignorował - (jak trap '' INT
) .
Jednak:
trap 'echo this is my trap' 0
save_traps=$(trap)
trap
zachowuje się szczególnie, gdy jest to pierwsze i jedyne uruchomienie polecenia w podpowłoce zastępowania poleceń, ponieważ odtwarza listę aktualnie ustawionej powłoki nadrzędnej traps
w formacie cytowanym dla bezpiecznego ponownego wejścia do powłoki. Możesz więc zrobić save_traps
, a następnie set
bez argumentów - i całą resztę już wspomnianą - aby praktycznie zablokować cały stan powłoki. Możesz jednak jawnie dodać export -p
i readonly -p
przywrócić oryginalne atrybuty var powłoki.
W każdym razie to wystarczy.
set +o
ishopt
? (co doshopt
bycia słowem,settable
jest używane na stronie podręcznika, więcshoptable
działa dla mnie)