mutt ação estranha

1

Eu escrevi um pequeno script para enviar vários e-mails de uma lista com diferentes assuntos.

 #!/bin/bash

 while read -a line
 do
 mailadd=${line[0]}
 subject=${line[1]} 

 mutt -s 'echo $subject' 'echo $mailadd' < /home/emanuele/testomail.txt

 done < prova.txt

Os scripts funcionam bem e enviam os e-mails, mas mutt me diz que ele precisa da opção -s .

mutt: option requires an argument -- 's'
Mutt 1.5.21 (2010-09-15)

Eu não entendo porque o script funciona bem, mas mudo a saída com um erro. Como posso consertar isso?

    
por emanuele 11.07.2013 / 17:47

1 resposta

1

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
    
por 12.07.2013 / 01:08