printf %s\\n "$-"
Перечислите варианты одной буквы в одной строке.
Этот параметр также может быть использован как:
set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"
Сначала отключить -f
расширение оболочки ilename, одновременно сохраняя значение $-
- если оно есть - в $1
. Далее, глобусы не возникают, и последнее +f
расширение ilename снова включается и, возможно, также отключается.
Например, если -f
расширение ilename уже было отключено при $-
первом сохранении значения для , то его сохраненное значение будет (как минимум) :
f
И поэтому, когда set
запускается снова, это работает для:
set +f -f
Что просто возвращает вас туда, откуда вы начали.
set +o
Перечислим все set
варианты таблицы оболочки (см ответа Джейсона за shopt
возможность - это то , что слово - варианты) в форме , которая является безопасной для спускаемога оболочки. Таким образом, вы также можете сделать:
state=$(set +o)
set -some -crazy -options
eval "$state"
Для сохранения, изменения и восстановления состояния параметров оболочки соответственно.
Чтобы обработать shopt
ионы и set
параметры таблицы за один раз:
state=$(set +o;shopt)
#do what you want with options here
eval "$state"
Вы также можете позвонить set
без каких-либо аргументов, чтобы добавить список всех установленных на данный момент переменных оболочки - также указанных для повторного входа в оболочку. И вы можете - в bash - дополнительно добавить команду, typeset -fp
чтобы также включить все объявленные в настоящее время функции оболочки. Вы можете смешать все это вместе и eval
когда будете готовы. Вы можете даже позвонить alias
без аргументов для более того же. Это ... может покрыть это, хотя. Я предполагаю, что есть "$@"
- что вы должны были бы поместить в bash
массив сначала, я полагаю, перед тем, как делать set
.
Нет, есть также trap
. Это немного смешно. Обычно:
trap 'echo this is my trap' 0
(echo this is my subshell; trap)
... просто напечатает это - моя подполочка, потому что подоболочка - это новый процесс, который получает свой собственный набор trap
s - и поэтому не наследует никаких trap
s, кроме тех, которые его родительский элемент явно проигнорировал - (например trap '' INT
) .
Тем не мение:
trap 'echo this is my trap' 0
save_traps=$(trap)
trap
ведет себя особенно, когда это первая и единственная команда, запускаемая в подоболочке подстановки команд, поскольку она воспроизводит список установленных traps
в данный момент родительских оболочек в формате, указанном для безопасного повторного входа в оболочку. И так что вы можете сделать save_traps
, то set
без аргументов - и все остальное уже было сказано - в значительной степени получить блокировку на все состояния оболочки. Возможно, вы захотите явно добавить export -p
и readonly -p
восстановить оригинальные атрибуты оболочки var.
Во всяком случае, этого достаточно.
set +o
иshopt
? (что касаетсяshopt
того, чтобы быть словом,settable
используется на странице руководства, так чтоshoptable
работает для меня)