printf %s\\n "$-"
Elencherà le opzioni a lettera singola in un'unica stringa.
Quel parametro può anche essere usato come:
set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"
Per prima cosa disabilitare l' -fespansione del nome shell mentre contemporaneamente si salva un valore per $-- se presente - in $1. Successivamente, non si verificano +fglobs e l' espansione dell'ultimo ilename viene nuovamente abilitata, e possibilmente anche disabilitata.
Ad esempio, se -fl'espansione ilename era già disabilitata quando il valore per è $-stato salvato per la prima volta, il suo valore salvato sarebbe (almeno) :
f
E così quando setviene eseguito di nuovo, funziona:
set +f -f
Il che ti riporta proprio dove hai iniziato.
set +o
Elencherà tutte setle opzioni della shell della tabella (vedi la risposta di Jason per leshopt opzioni capaci - è una parola? -) in una forma sicura per il rientro della shell. In questo modo, puoi anche fare:
state=$(set +o)
set -some -crazy -options
eval "$state"
Per salvare, modificare e ripristinare rispettivamente lo stato delle opzioni della shell.
Per gestire gli shoptioni e le setopzioni della tabella in una sola volta:
state=$(set +o;shopt)
#do what you want with options here
eval "$state"
È inoltre possibile chiamare set senza alcun argomento per aggiungere un elenco di tutte le variabili attualmente impostate della shell, citate anche per il rientro nella shell. E puoi - in bash - aggiungere inoltre il comando typeset -fpper includere anche tutte le funzioni di shell attualmente dichiarate. Puoi raggruppare tutto insieme e evalquando sei pronto. Puoi anche chiamare aliassenza argomenti per più o meno lo stesso. Quello ... potrebbe coprirlo, comunque. Immagino che ci sia "$@"- che dovresti mettere in un basharray prima, suppongo, prima di farlo set.
No, c'è anche trap. Questo è un po 'divertente. Generalmente:
trap 'echo this is my trap' 0
(echo this is my subshell; trap)
... stamperò solo questa è la mia subshell perché la subshell è un nuovo processo e ottiene il suo set di traps - e quindi non eredita alcun traps ma quelli che il suo genitore ha esplicitamente ignorato - (come trap '' INT) .
Tuttavia:
trap 'echo this is my trap' 0
save_traps=$(trap)
trapsi comporta in modo particolare quando si tratta del primo e unico comando eseguito in una subshell di sostituzione comandi in quanto riprodurrà un elenco della shell padre attualmente impostato trapsin un formato quotato per un rientro sicuro nella shell. E così puoi fare save_traps, quindi set senza argomenti - e tutto il resto già menzionato - per ottenere praticamente un blocco su tutto lo stato della shell. Tuttavia, potresti voler aggiungere export -pe readonly -pripristinare esplicitamente gli attributi var della shell originale.
Comunque, è abbastanza.
set +oeshopt? (quanto ashoptpoter essere una parola,settableviene usato nella pagina man, quindishoptablefunziona per me)