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)shopt
jonów, tj.state=$(set +o;shopt -p)
Ze
man
strony:wydrukuje listę wszystkich włączonych opcji.
źródło
set
ishopt
?set
jest o wiele bardziej rozbudowany: zobacz pozycję strony podręcznika man .shopt <option>
huponexit
.). prosty sposób to naprawićshopt | grep on$
Aby wyświetlić wszystkie opcje:
Aby sprawdzić konkretną opcję:
Weź
verbose
przykład jako przykład:źródło
Opcje ?: Istnieją trzy grupy opcji w bash.
Opcje odczytane lub ustawione przez polecenie
set
.(Użyj tego polecenia instrukcji:
LESS=+/'set \[--abefhkmnptuvxBCEHPT\]' man bash
)Wszystkie opcje jedną literę:
abefhkmnptuvxBCEHPT
Również opcje (które nie mają odpowiednika jednej litery):
Opcje odczytane lub ustawione przez polecenie
shopt
.(Czytaj ręczny z tym poleceniem:
LESS=+/'shopt \[-pqsu\]' man bash'
)Lista jest dość długa, ale łatwa do wydrukowania, przeznaczenie:
lub podobny (ale nie równy):
Opcje, które można ustawić na wezwanie:
(komenda instrukcji:
LESS=+/'^INVOCATION' man bash
)Wszystkie
set
opcje:Wszystkie
shopt
opcjeNiektóre opcje, które mają znaczenie tylko podczas INWOKOWANIA bash:
A także (długie opcje):
Wszystkie
set
opcje jednej litery i-ri
są drukowane za pomocą$-
.Na przykład:
Wywołanie bash jako powłoki logowania jest zgłaszane tylko w shopt:
A zatem:
Opcji
-n
nie można przetestować za pomocą żadnego kodu, ponieważ oznacza to: nie wykonuj żadnego kodu.Opcje drukowania
Najlepsze narzędzie do listy opcji działającej powłoki, zarówno ustawione za
set
pomocą, jak i ustawione za pomocą,shopt
jest takie samoshopt
. Aby wyświetlić listę ustawionych opcji:Który działa dokładnie tak jak
set -o
. Użyj,shopt -po
aby uzyskać taki sam wynik jakset +o
.Aby wyświetlić opcje shopt:
Z których możesz wydrukować te ustawione
shopt -ps
lub wyłączoneshopt -pu
Aby uzyskać wszystkie opcje. O ile to możliwe,
-sDc
nie można wydrukować wielu długich opcji, a niektóre ( ) na INVOCATION:Aby zapisać je w zmiennej:
Zmiennej można użyć do cofnięcia wszystkich opcji:
źródło
Aby sprawdzić konkretną opcję:
źródło