Por que o sendmail funciona de maneira diferente em shells diferentes?

3

O código a seguir funciona quando eu o executo diretamente em bash shell:

SUBJECT="SUBJECT-"'date';
MAIL_FROM="[email protected]";
MAIL_TO="[email protected]";
MAIL_CC="[email protected]";
MAIL_FILE="/path/of/html/body.html";
(echo -e "Subject: $SUBJECT\nMIME-Version: 1.0\nFrom: $MAIL_FROM\nTo:$MAIL_TO\nCc:$MAIL_CC\nContent-Type: text/html\nContent-Disposition: inline\n\n";/bin/cat $MAIL_FILE) | /usr/sbin/sendmail -f  $MAIL_FROM $MAIL_TO;

Mas quando eu tento executá-lo dentro de um script como abaixo ...

Conteúdo do mail.sh:

#!/usr/bin/ksh

SUBJECT="SUBJECT-"'date';
MAIL_FROM="[email protected]";
MAIL_TO="[email protected]";
MAIL_CC="[email protected]";
MAIL_FILE="/path/of/html/body.html";
(echo -e "Subject: $SUBJECT\nMIME-Version: 1.0\nFrom: $MAIL_FROM\nTo:$MAIL_TO\nCc:$MAIL_CC\nContent-Type: text/html\nContent-Disposition: inline\n\n";/bin/cat $MAIL_FILE) | /usr/sbin/sendmail -f  $MAIL_FROM $MAIL_TO;

Eu obtenho os seguintes resultados ...

$ sh mail.sh #Mail sent but the body is in text format containing "-e Subject: SUBJECT-Wed Jan 30 04:45:42 EST....." e o código HTML processado como texto.

$ bash mail.sh # Mail is received with mail body containing correct HTML format.

Portanto, parece que echo -e é reconhecido pelo bash. Mas quando eu uso "#! / Usr / bin / bash" e executo o script como $ sh mail.sh , ainda recebo uma mensagem em formato de texto.

Por que isso é tão ..? Agradecemos antecipadamente por suas sugestões.

    
por Kent Pawar 30.01.2013 / 11:04

1 resposta

3

O Solaris echo

$ echo -e foo
-e foo

não funciona como mais alguns outros comandos echo :

$ bash
$ echo -e foo
foo 
$ which echo
/usr/bin/echo
$ type -t echo
builtin

A versão bash embutida funciona como esperado, o ksh embutido mantém o comportamento do Solaris ( echo geralmente depende do sistema em ksh quando as opções são usadas). Um echo simples deve funcionar em ksh , no -e :

$ ksh
$ echo -e "foo\nbar"
-e foo
bar
$ echo "foo\nbar"
foo
bar

Então você tem um problema Solaris , ao invés de um problema sendmail : -)

Você pode tentar o printf como uma maneira mais portátil de fazer isso.

    
por 30.01.2013 / 12:06