У меня есть небольшая функция в моем bashrc
, поэтому я могу запустить скрипт и отправить его по электронной почте, когда он закончится. Код состоит в следующем:bash nohup с двумя командами
run() {
[email protected]
last="${!#}"
rest="${@:1:($#-1)}"
(nohup $rest &> $last < /dev/null; mail -s "$rest" "$email" < "$last") &
}
функция используется как этот
run ./script.sh arg1 arg2 output
и это, кажется, работает большую часть времени, но иногда электронная почта не присылают, даже если сценарий закончен , Я подозреваю, что это связано с тем, что я закрываю серверный терминал. В этих случаях сценарий все еще работает из-за nohup
, но он не отправляет электронное письмо в конце. Я бы очень признателен за некоторые указатели, чтобы заставить его работать правильно.
'rest =" $ {@: 1: ($ # - 1)} "это плохая идея - вы не можете точно представить вектор аргумента в скаляре, так что это выполняется риск того, что аргументы будут неправильно распределены по строкам, glob-расширен и т. д. Вы можете использовать 'rest = (" $ {@: 1: ($ # - 1)} ")', хотя, а затем развернуть его с помощью ' $ {rest [@]} "(или для однострочной сюжетной строки,' '$ {rest [*]}" '... или, точнее,' printf -v rest_cmd '% q' "$ {rest [@]}" ', а затем использовать' '$ rest_cmd" 'как аргумент mail) –
Спасибо за подсказку, я обязательно изменю это. – skd