Quiero usar sendmail para enviarme cosas y quiero hacerlo en línea.
echo "mail content" | sendmail emailataddres.com
Lo envía sin tema.
La línea de asunto debe aparecer antes del contenido del Correo, por lo que busco algo similar a:
echo "mail content" | prepend "Subject: All that matters" | sendmail emailataddres.com
sed y awk tienden a ser realmente incómodos de usar y recordar.
EDITAR : Solo para aclarar: echo "Contenido de correo" es solo un ejemplo ilustrativo. Necesito poder anteponer cosas a las secuencias estándar de cualquier fuente. por ejemplo: ifconfig, zcat, etc.
command-line
bash
posix
AndreasT
fuente
fuente
echo -e "Subject: All that matters\nmail content"
? O más independiente de la plataforma:printf 'Subject: %s\n%s\n' "All that matters" "mail content"
. También podría escribir un pequeño script que solo tome los dos argumentos de cadena para hacer una línea más simple.prepend
hacer Para saber cómo anteponer algo, debe esperar hasta que el comando ascendente (pecho
. Ej. ) Envíe el EOF, para que pueda insertar sus datos delante de él en el flujo antes de pasarlo a stdout para que se canalice a sendmail. Suena como una tarea para un script corto de Ruby o Python.mail
comando (a veces llamado bsdmail) en lugar de hacerlosendmail
directamente.mail
toma una-s subject
opción opcional , por ejemplo:ifconfig -a | mail -s 'Current ifconfig output' [email protected]
Respuestas:
Estoy bastante seguro de que hay una mejor solución, pero esto debería funcionar.
fuente
printf
lugar del segundoecho
y debería estar bienecho -n
Utilice lo que dijo Claudio o haga el suyo:
~ / bin / prepend:
p.ej:
fuente
Esto está inspirado en la respuesta de Claudio.
Si no desea un retorno de descanso entre sus salidas, agregue el
-n
parámetro. Esto se verá así:$ echo 1 | (echo -n 2 && cat)
Lo que dará:
21
fuente
-n
lugar equivocado. De todos modos, la actualización debería dar "21 \ n" si desea deshacerse de la \ n luego agregue un -n antes del 1.De las piezas que he reunido ... podrías hacer algo como esto:
Tenga en cuenta que no cerré las comillas en la primera línea ... porque no todos los shells traducen el carácter
\n
a una nueva línea ... pero todavía tengo que encontrar uno que no procese una nueva línea real dentro de las comillas.Cuando un comando está encerrado en el carácter `, se ejecutará y la salida se inyectará en el lugar. Tenga en cuenta que este código es un poco peligroso ya que es posible inyectar comandos adicionales en línea que podrían comprometer fácilmente su sistema ...
**** editar **** Siguiendo los consejos de Claudio, una opción más limpia se vería así:
Incluso con esa plantilla, podría ser explotada.
fuente
$()
que `` ya que se supone que es más portátil (y también más legible). Además, puede usarecho
la-e
opción '' para hacer que traduzca nuevas líneas (echo -e "1\n2"
) o simplemente use printf como lo sugiere Daniel en el primer comentario.Puede anteponer la salida canalizada mediante la sustitución del proceso :
fuente