Я хочу проверить с помощью procmail, существует ли файл, и в зависимости от этого набора DROPPRIVS = yes, если это не так, оставайтесь с DROPPRIVS = no
Почему это не работает?
:0 w
* `test -f $HOME/mail/.procmailrc` ?? 1
{
DROPPRIVS=yes
}
Во-первых, вывод из test
вообще ничего, поэтому обратные кавычки захватят пустую строку; предположительно, вы действительно хотите захватить код выхода из test
, а не выход.
Но в любом случае обратные кавычки в условии недействительны. Вы можете использовать обратные кавычки вне условия и сравнивать результат или код выхода с переменной:
EXISTS=`test -f $HOME/mail/.procmailrc`
EXITCODE=$?
:0
* EXITCODE ?? ^^1^^
{ DROPPRIVS=yes }
но, что более идиоматично и элегантно, вы можете использовать один вопросительный знак для проверки кода выхода внешней команды:
:0w
* ! ? test -f $HOME/mail/.procmailrc
{ DROPPRIVS=yes }
В !
отменяет условие, поэтому любой ненулевой код выхода запускает действие.