Ich möchte sendmail verwenden, um mir Inhalte zu senden, und möchte dies in einem Oneliner tun.
echo "mail content" | sendmail emailataddres.com
Sendet es ohne Betreff.
Die Betreffzeile muss vor dem E-Mail-Inhalt stehen, daher suche ich nach etwas in der Art von:
echo "mail content" | prepend "Subject: All that matters" | sendmail emailataddres.com
sed und awk neigen dazu, sehr umständlich zu sein und sich zu erinnern.
EDIT : Nur zur Verdeutlichung: Echo "Mail-Inhalt" ist nur ein anschauliches Beispiel. Ich muss in der Lage sein, den Standard-Streams von jeder Quelle etwas voran zu stellen. zB: ifconfig, zcat, etc ..
command-line
bash
posix
AndreasT
quelle
quelle
echo -e "Subject: All that matters\nmail content"
? Oder mehr plattformunabhängig:printf 'Subject: %s\n%s\n' "All that matters" "mail content"
. Sie können auch ein kleines Skript schreiben, das nur die beiden Zeichenfolgenargumente verwendet, um einen noch einfacheren Einzeiler zu erstellen.prepend
ich tun? Um zu wissen, wie Sie etwas voranstellen müssen, müssen Sie warten, bis der Upstream-Befehl (z. B.echo
) die EOF sendet, damit Sie Ihre Daten davor in den Stream einfügen können, bevor Sie sie an stdout übergeben, um an sendmail weitergeleitet zu werden. Klingt nach einer Aufgabe für ein kurzes Ruby- oder Python-Skript.mail
Befehl (manchmal bsdmail genannt) anstelle vonsendmail
direkt zu verwenden.mail
kann optional gewählt werden-s subject
, z. B .:ifconfig -a | mail -s 'Current ifconfig output' [email protected]
Antworten:
Ich bin mir ziemlich sicher, dass es eine schönere Lösung gibt, aber das sollte reichen.
quelle
printf
anstelle der zweitenecho
und Sie sollten in Ordnung seinecho -n
Verwenden Sie entweder das, was Claudius gesagt hat, oder machen Sie es sich selbst:
~ / bin / prepend:
z.B:
quelle
Dies ist inspiriert von Claudius Antwort.
Wenn Sie keine Unterbrechung zwischen Ihren Ausgängen
-n
wünschen , fügen Sie den Parameter hinzu. Das wird so aussehen:$ echo 1 | (echo -n 2 && cat)
Welches wird geben:
21
quelle
-n
an die falsche Stelle gesetzt. Wie auch immer, das Update sollte "21 \ n" ergeben, wenn Sie das \ n loswerden möchten.Aus den Stücken, die ich gesammelt habe, könnte man so etwas machen:
Beachten Sie, dass ich die Anführungszeichen in der ersten Zeile nicht geschlossen habe, da nicht alle Shells das
\n
Zeichen in ein Zeilenumbruchzeichen umwandeln. Ich muss jedoch noch eines finden, das in den Anführungszeichen kein tatsächliches Zeilenumbruchzeichen verarbeitet.Wenn ein Befehl in das Zeichen `eingeschlossen ist, wird er ausgeführt und die Ausgabe wird an Ort und Stelle eingefügt. Denken Sie daran, dass dieser Code ein bisschen gefährlich ist, da es möglich ist, zusätzliche Befehle in die Zeile einzufügen, die Ihr System leicht gefährden können ...
**** bearbeiten **** Nach Empfehlung von Claudius würde eine sauberere Option so aussehen:
Auch mit dieser Vorlage könnte es ausgenutzt werden.
quelle
$()
besser zu benutzen als ``, da es portabler (und auch lesbarer) sein soll. Darüber hinaus können Sie verwendenecho
‚s-e
Option , um auf neue Zeilen (zu machen übersetzenecho -e "1\n2"
) oder Verwendung printf wie Daniel in dem ersten Kommentar vorgeschlagen.Sie können der Pipe-Ausgabe mithilfe der Prozessersetzung voranstellen :
quelle