Intereting Posts
Перенаправление вывода GREP в разные текстовые файлы в зависимости от содержимого захвата SOX-скрипт для распознавания специального шаблона как перебирать аргументы в сценарии bash Как исправить предупреждение об ошибке не удалось подключиться к lvmetad, нет такого файла или каталога, возвращающегося к внутреннему сканированию в ubuntu 15.10 Какие файловые системы можно сократить в 2011 году? что такое контекст подпрограммы? Если ваш Linux-накопитель является SSD или HDD В чем разница между virbr # и vnet #? Как я могу заставить sudo забыть пароль автоматически после одной команды? rsync в очень большой директории проблема с использованием grep с файлом шаблона Помимо журнала, каковы различия между ext2 и ext3? Как установить git-svn с учетом этого странного статуса apt-cache? CentOS не видит USB-устройство Как перечислить все файлы, упорядоченные по размеру

Выполнение почтовой команды внутри функции вызывает «вилку»,

Когда я пытаюсь выполнить 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 ] if ! [ "$?" = 0 ] 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?

Вы вызываете mail функции из одной функции:

 #!/bin/bash mail() { # This actually calls the "mail" function # and not the "mail" executable echo "Free of oxens" | mail -s "Do you want to play chicken with the void?" "example@example.org" } mail exit 0 

Это должно работать:

 #!/bin/bash mailfunc() { echo "Free of oxens" | mail -s "Do you want to play chicken with the void?" "example@example.org" } mailfunc exit 0 

Обратите внимание, что имя функции больше не вызывается из самой функции.

В противном случае:

 mail(){ echo olly olly oxenfree | command mail -s 'and the rest' and@more } 

… должно работать нормально.

Самое «традиционное» решение в этих случаях – это на самом деле вызвать команду с полным путем:

 mail() { echo "Free of oxens" | /usr/bin/mail -s "Do you want to play chicken with the void?" "example@example.org" } 

Все остальные ответы работают и, вероятно, более переносимы, но я думаю, что это наиболее вероятное решение, которое вы найдете в сценариях в диком реальном мире, поэтому я включаю его для полноты.