Когда я пытаюсь выполнить mail
функцию изнутри скрипта bash, она создает нечто похожее на бомбу-вилку. Чтобы уточнить, это создает проблему:
#!/bin/bash
mail() {
echo "Free of oxens" | mail -s "Do you want to play chicken with the void?" "example@example.org"
}
mail
exit 0
Иногда вы можете просто убить команду, и она убьет дочерние процессы, но иногда вам придется killall -9
.
Неважно, было ли отправлено письмо или нет. Вилка бомба создана так или иначе. И это не похоже на добавление какой-либо проверки кода завершения, например if ! [ "$?" = 0 ]
, подсказок.
Но приведенный ниже скрипт работает как задумано, либо выдает ошибку, либо отправляет почту.
#!/bin/bash
echo "Free of oxens" | mail -s "Do you want to play chicken with the void?" "example@example.org"
exit 0
Почему это происходит? И как бы вы проверили код выхода команды mail?
bash
shell-script
mail-command
roxto
источник
источник
Ответы:
Вы вызываете функцию
mail
из той же функции:Это должно работать:
Обратите внимание, что имя функции больше не вызывается из самой функции.
источник
В противном случае:
... должно работать нормально.
источник
command
роль, как и для непрофессионала это трудно заметить , что изменение наряду сolly olly oxenfree
и'and the rest' and@more
изменениями, особенно с подсветкой синтаксиса.Наиболее «традиционным» решением в этих случаях является вызов команды с полным путем:
Все остальные ответы работают и, вероятно, более переносимы, но я думаю, что это наиболее вероятное решение, которое вы найдете в сценариях в диком реальном мире, поэтому я включил его для полноты.
источник
/bin/mail
. Я думаю, что это доказывает ценностьcommand mail
синтаксиса./usr
потому что их парадигма заключается в перемещении всех двоичных файлов в один и тот же каталог, так что/bin
это просто символическая ссылка на/usr/bin
. Так что да ... это не переносимо, но чаще встречается, чем-command
то - особенно в старых загрузочных скриптах, которые создавались специально для каждого дистрибутива, все абсолютные пути были жестко закодированы (например, скрипты rc в Slackware).