Что делает «set -f» в Korn Shell?

Похоже, это связано с ошибкой №665487 . Чтобы удалить dovecot-managesolated , попробуйте временно переименовать /etc/init.d/dovecot :

sudo mv /etc/init.d/dovecot{,.disabled}
sudo apt-get purge dovecot-managesieved
sudo mv /etc/init.d/dovecot{.disabled,}

Это должно избежать попытки перезапуска dovecot во время работы пакета удаление.

3
31.12.2016, 01:48
2 ответа

set -f - переносимый (то есть POSIX) способ отключить расширение имени файла.

При включении (по умолчанию или с set + f ) расширение имени файла - это операция, выполняемая оболочкой, которая заменяет, когда это возможно, аргументы командной строки, содержащие:

  • вхождений подстановочных знаков (? = любой одиночный символ и * = любое количество символов)
  • диапазоны, заключенные в квадратные скобки (например, [a-z12] = любой символ из ] a до z , или 1 или 2 )
  • несоответствующие списки (например, [^ az] = любой символ за пределами диапазона a до z )
  • и классы символов (например, [[: xdigit:]] = любой символ, который можно использовать для представления шестнадцатеричного числа)

соответствующими им именами файлов.

Когда отключено, эти аргументы остаются без изменений.

$ pwd
/etc/samba
$ echo *
lmhosts smb.conf
$ echo *o??
smb.conf
$ set -f
$ echo *
*
$ echo *o??
*o??
13
27.01.2020, 21:10

И в ksh, и в bash команда set -f отключает создание имени файла («расширение имени пути»). Это эквивалентно установке параметра оболочки noglob (в обеих оболочках).

Он не позволяет оболочке расширять шаблоны подстановки файлов:

$ ls -l
total 0
-rw-r--r--  1 kk  kk  0 Dec 30 21:39 hello
-rw-r--r--  1 kk  kk  0 Dec 30 21:39 world

$ echo *l[a-k]
world

$ echo *
hello world

$ set -o noglob

$ echo *
*

$ echo *l[a-k]
*l[a-k]

Чтобы отменить (очистить) настройку, используйте либо set + f , либо set + o noglob .

1
27.01.2020, 21:10

Теги

Похожие вопросы