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ć -frozszerzanie nazwy powłoki , jednocześnie zapisując wartość dla $-- jeśli w ogóle - w $1. Następnie nie występują globusy, a ostatnie +frozszerzenie nazwy jest ponownie włączone, a być może również wyłączone.
Na przykład, jeśli -frozszerzenie 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 setponownym uruchomieniu działa:
set +f -f
Co po prostu przywraca Cię do początku.
set +o
Wyświetli listę wszystkich setopcji powłoki tabeli (patrz odpowiedź Jasona dla shoptmoż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ć shoptjony i setopcje 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 -fpaby uwzględnić również wszystkie aktualnie zadeklarowane funkcje powłoki. Możesz zebrać wszystko razem i evalkiedy będziesz gotowy. Możesz nawet zadzwonić aliasbez 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 bashtablicy, 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 traps - a więc nie dziedziczy żadnych traps, ale te, które jego rodzic wyraźnie zignorował - (jak trap '' INT) .
Jednak:
trap 'echo this is my trap' 0
save_traps=$(trap)
trapzachowuje 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 trapsw 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 -pi readonly -pprzywrócić oryginalne atrybuty var powłoki.
W każdym razie to wystarczy.
set +oishopt? (co doshoptbycia słowem,settablejest używane na stronie podręcznika, więcshoptabledziała dla mnie)