Por partes...
La notación '<<<' NO es una redirección... Es decir, el shell NO va a leer un fichero externo y lo va a redirigir hacia el comando
mutt.
Viendo el manual de bash, vemos que '<<<' sirve para definir '
Here Strings'. Bash expande el texto (si tuviera caracteres comodines) y lo mete en la entrada estándar del comando. Así que sí: sí tienes razón en usarlo (de hecho, no lo conocía, y me lo apunto para mis trabajos futuros).
Entonces, sí que te funciona en tus
scripts bash.... y ahí está el problema...
system() NO ejecuta
bash, sino
sh. Y si miras la página de manual de sh, no tiene ningún redireccionamiento '<<<'. Y por eso, sale error.
Cierto que en muchos sistemas,
sh es un enlace al programa
bash, pero no siempre es así.
Solución... 1) Modificar la línea de comandos para que siga la notación de sh. Podría ser con (no probado)
echo "texto" | mutt -s "asunto" correo@electronico2) Decirle a system() que sí ejecute nuestro comando bajo bash y la opción -c (ejemplo que
sí he probado):
Using perl Syntax Highlighting
my $asunto = 'Asunto especial';
my $texto = 'Un texto que queremos enviar';
system('/bin/bash', '-c', qq(mail -s "$asunto" $email <<< "$texto"));
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
(Bueno, yo, en vez de
mutt, lo he hecho con el comando
mail, que para enviar un correo sencillo, vale) (Por el hecho de usar varios argumentos en system(), Perl ejecuta el primer argumento como el programa principal, y le pasa el resto de argumentos. Más información en
peldoc -f system).
Fíjate que he usado el operador qq(), que tiene la misma función que las comillas dobles, así que se hará la interpolación de las variables Perl dentro de la cadena, mientras podemos seguir usando las comillas dobles como caracteres literales, ya que necesitamos entrecomillar tanto el $texto como el $asunto, ya que podrían contener espacios en blanco -como así es en el ejemplo-, que
son significativos para
bash. Poniendo las comillas dobles,
bash los trata como un solo argumento.
Un hilo parecido.