Je veux utiliser sendmail pour m'envoyer des trucs et je veux le faire dans un oneliner.
echo "mail content" | sendmail emailataddres.com
L'envoie sans sujet.
La ligne d'objet doit précéder le contenu du courrier, donc je cherche quelque chose dans le sens de:
echo "mail content" | prepend "Subject: All that matters" | sendmail emailataddres.com
sed et awk ont tendance à être très difficiles à utiliser et à mémoriser.
EDIT : Juste pour clarifier: echo "Mail content" n'est qu'un exemple illustratif. J'ai besoin de pouvoir ajouter des trucs aux flux standard à partir de n'importe quelle source. par exemple: ifconfig, zcat, etc.
command-line
bash
posix
AndreasT
la source
la source
echo -e "Subject: All that matters\nmail content"
? Ou plus agnostique plate - forme:printf 'Subject: %s\n%s\n' "All that matters" "mail content"
. Vous pouvez également écrire un petit script qui prend simplement les deux arguments de chaîne pour créer une ligne encore plus simple.prepend
- il faire? Afin de savoir comment ajouter quelque chose, vous devez attendre jusqu'à ce que la commande en amont (par exempleecho
) envoie l'EOF, afin que vous puissiez insérer vos données en amont dans le flux avant de les passer à stdout pour être canalisées vers sendmail. Cela ressemble à une tâche pour un script Ruby ou Python court.mail
commande (parfois appelée bsdmail) au lieu desendmail
directement.mail
prend une-s subject
option facultative , par exemple:ifconfig -a | mail -s 'Current ifconfig output' [email protected]
Réponses:
Je suis presque sûr qu'il existe une meilleure solution, mais cela devrait suffire.
la source
printf
au lieu de la secondeecho
et tout devrait bien seecho -n
Utilisez ce que Claudius a dit ou créez le vôtre:
~ / bin / prepend:
par exemple:
la source
Ceci est inspiré par la réponse de Claudius.
Si vous ne voulez pas de retour de pause entre vos sorties, ajoutez le
-n
param. Cela ressemblera à:$ echo 1 | (echo -n 2 && cat)
Ce qui donnera:
21
la source
-n
le mauvais endroit. Quoi qu'il en soit, la mise à jour devrait donner "21 \ n" si vous voulez vous débarrasser du \ n, puis ajoutez simplement un -n avant le 1.D'après les morceaux que j'ai rassemblés ... vous pourriez faire quelque chose comme ceci:
Notez que je n'ai pas fermé les guillemets sur la première ligne ... parce que tous les shells ne traduisent pas le caractère
\n
en nouvelle ligne ... mais je n'ai pas encore trouvé celui qui ne traitera pas une nouvelle ligne réelle à l'intérieur des guillemets.Lorsqu'une commande est placée dans le caractère `, elle sera exécutée et la sortie sera injectée sur place. Gardez à l'esprit que ce morceau de code est un peu dangereux car il est possible d'injecter des commandes supplémentaires en ligne qui pourraient facilement compromettre votre système ...
**** modifier **** Suivant les conseils de Claudius, une option plus propre ressemblerait à ceci:
Même avec ce modèle, il pourrait être exploité.
la source
$()
plutôt que `` car il est censé être plus portable (et aussi plus lisible). De plus, vous pouvez utiliserecho
l'-e
option de pour le faire traduire newlines (echo -e "1\n2"
) ou simplement utiliser printf comme suggéré par Daniel dans le premier commentaire.Vous pouvez ajouter un préfixe à la sortie canalisée à l'aide de la substitution de processus :
la source