Primeiro, 'echo $subject'
é uma maneira complicada de escrever $subject
(exceto que ele manipula o valor um pouco mais se ele contiver espaços em branco ou \[*?
, porque $subject
de cotações externas é tratado como uma lista separada por espaço em branco de padrões de caracteres curinga e, em seguida, o resultado de toda a substituição de comando é novamente tratado como uma lista separada por espaço em branco de padrões de caractere curinga).
A única maneira de seu comando resultar nesse erro é se 'echo $subject' 'echo $mailadd'
estiver vazio. Isso acontece somente quando 'echo $subject'
e 'echo $mailadd'
consistem apenas em espaço em branco, o que acontece apenas se as variáveis subject
e mailadd
estiverem vazias (além de alguns casos excêntricos, como subject
sendo o caractere ?
e o diretório atual contendo um arquivo cujo nome é um espaço único). Então, muito provavelmente você tem algumas linhas em branco no seu arquivo de entrada.
Você deve sempre colocar aspas duplas em torno de substituições de variáveis e substituições de comandos ( "$somevar"
, "$(somecommand)"
) a menos que você realmente queira dizer que os valores das variáveis devem ser interpretados como listas separadas por espaços em branco de padrões curinga de arquivos.
mutt -s "$subject" "$mailaddr" <~/testeomail.txt
Se houver uma linha em branco no arquivo de entrada, pule-a.
while read -a line; do
mailadd=${line[0]}
subject=${line[1]}
if [ -z "$subject" ]; then continue; fi
mutt -s "$subject" "$mailadd" < /home/emanuele/testomail.txt
done < prova.txt