Я пытаюсь написать скрипт notify-finish
, который можно добавить к любой команде. Когда это будет сделано, он запустит команду, заданную следующими аргументами, а затем отправит электронное письмо пользователю, когда команда будет выполнена. Вот что у меня есть:
PROG=$1
# Run command given by arguments
$@
ECODE=$?
echo -e "Subject: `hostname`: $PROG finished\r\nTo: <$USER>\r\n\r\nExited with $ECODE\r\n" | sendmail $USER
Это работает большую часть времени, но когда аргументы содержат пробелы, кавычка удаляется.
Рабочий пример:
notify-finished rsync -avz source/ user@remote:dest/
Неудачный пример:
notify-finished rsync -avz -e 'ssh -c blowfish' source/ user@remote:dest/
Во втором случае $@
расширяется до rsync -avz -e ssh -c blowfish source user@remote:dest/
, пропуская одинарные кавычки. Он не работает ни с двойными кавычками, ни с $*
.
После прочтения других постов я попытался поместить команду в массив, но у меня точно такая же проблема:
CMD=(notify-finished rsync -avz -e 'ssh -c blowfish' source/ user@remote:dest/)
${CMD[@]}
Как мне заставить это работать для всех аргументов?