Chcę używać sendmaila, aby wysyłać mi rzeczy i chcę to zrobić w oneliner.
echo "mail content" | sendmail emailataddres.com
Wysyła to bez tematu.
Temat musi znajdować się przed treścią poczty, więc szukam czegoś w stylu:
echo "mail content" | prepend "Subject: All that matters" | sendmail emailataddres.com
sed i awk są zwykle niewygodne w użyciu i zapamiętywaniu.
EDYCJA : Aby wyjaśnić: echo „Treść wiadomości” to tylko przykład ilustrujący. Muszę być w stanie przygotować rzeczy do standardowych strumieni z dowolnego źródła. np .: ifconfig, zcat itp.
command-line
bash
posix
AndreasT
źródło
źródło
echo -e "Subject: All that matters\nmail content"
? Lub więcej platform agnostyk:printf 'Subject: %s\n%s\n' "All that matters" "mail content"
. Możesz także napisać mały skrypt, który po prostu bierze dwa argumenty łańcuchowe, aby uczynić jeszcze prostszą jednowierszową.prepend
zrobić Aby wiedzieć, jak coś przygotować, musisz poczekać, aż polecenieecho
wysyłające (np. ) Wyśle EOF, abyś mógł wstawić swoje dane przed strumieniem, zanim przekaże je na standardowe wyjście, aby otrzymać potok do sendmaila. Brzmi jak zadanie dla krótkiego skryptu Ruby lub Python.mail
polecenia (czasami nazywanego bsdmail) zamiastsendmail
bezpośredniego.mail
ma opcjonalną-s subject
opcję, np .:ifconfig -a | mail -s 'Current ifconfig output' [email protected]
Odpowiedzi:
Jestem całkiem pewien, że istnieje lepsze rozwiązanie, ale tak powinno być.
źródło
printf
zamiast drugiegoecho
i powinieneś być w porządkuecho -n
Użyj tego, co powiedział Klaudiusz, lub stwórz własny:
~ / bin / prepend:
na przykład:
źródło
Jest to inspirowane odpowiedzią Klaudiusza.
Jeśli nie chcesz powrotu przerwy między wyjściami, dodaj
-n
parametr. Będzie to wyglądać tak:$ echo 1 | (echo -n 2 && cat)
Co da:
21
źródło
-n
niewłaściwe miejsce. W każdym razie aktualizacja powinna dać „21 \ n”, jeśli chcesz się pozbyć \ n, po prostu dodaj -n przed 1.Z kawałków, które zebrałem ... możesz zrobić coś takiego:
Zauważ, że nie zamykałem cudzysłowów w pierwszym wierszu ... ponieważ nie wszystkie powłoki tłumaczą
\n
znak na znak nowej linii ... ale jeszcze nie znalazłem takiego, który nie przetworzy prawdziwego nowego wiersza w cudzysłowie.Gdy polecenie jest zawarte w znaku `, zostanie ono wykonane, a dane wyjściowe zostaną wprowadzone w miejsce. Pamiętaj, że ten fragment kodu jest nieco niebezpieczny, ponieważ możliwe jest wstrzyknięcie dodatkowych poleceń, które mogą z łatwością zagrozić Twojemu systemowi ...
**** edit **** Zgodnie z radą Klaudiusza czystsza opcja wyglądałaby tak:
Nawet z tym szablonem można go wykorzystać.
źródło
$()
niż ``, ponieważ ma być bardziej przenośny (i również bardziej czytelny). Ponadto, można użyćecho
„s-e
opcję, aby go przetłumaczyć nowe linie (echo -e "1\n2"
) lub po prostu użyć printf jak sugeruje Daniel w pierwszym komentarzu.Możesz przejść do wyjścia w potoku za pomocą podstawienia procesu :
źródło