Как отправить письмо с несколькими вложениями?

Вы говорите:

... похоже, что само назначение считается командой... с нулевым значением выхода, но которая применяется перед правой частью присваивания (например, вызов подстановки команды...)

Это не такой уж плохой способ взглянуть на это.  Но это небольшое упрощение.  Общий статус возврата из

A=$(cmd1)  B=$(cmd2)  C=$(cmd3)  D=$(cmd4)  E=mc2

- это статус выхода из cmd4.  Назначение E=, которое происходит после назначения D=. не устанавливает общий статус выхода в 0.

Кроме того, как указывает icarus , переменные могут быть установлены как readonly.  Рассмотрим следующий вариант примера icarus:

$ err() { echo "stdout $*"; echo "stderr $*" >&2; return ${1:-1}; }
$ readonly A
$ Z=$(err 41 zebra) A=$(err 42 antelope) B=$(err 43 badger)
stderr 41 zebra
stderr 42 antelope
bash: A: readonly variable
$ echo $?
1
$ printf "%s = %s\n" Z "$Z" A "$A" B "$B"
Z = stdout 41 zebra
A =
B =
$

Несмотря на то, что A является readonly, bash выполняет подстановку команды справа от A= -... и then прерывает команду, потому что A доступен только для чтения.  Это еще больше противоречит вашей интерпретации что значение выхода из присваивания применяется перед правой частью присваивания.

1
09.12.2016, 01:51
2 ответа

Я рекомендую вам использовать mutt для отправки писем с вложениями из скриптов:

$ cat mail.txt | \
    mutt -s 'My Subject' \
      -a /path/file1 /path/file2 /path/file3 /path/file4 \
      -- email@example.com

Вам необходимо использовать - для разделения вложенных файлов и адреса назначения.

2
27.01.2020, 23:34

Лично я использую mutt для чтения и отправки писем. Предполагается, что ваш файл filenames.txt :

/path/to/file1
/path/to/file2

Я бы написал:

mutt -s "Subject" -a $(<filenames.txt) -- dest@example.com < mailbody.txt
0
27.01.2020, 23:34

Теги

Похожие вопросы