Saya ingin menggunakan sendmail untuk mengirimi saya barang dan ingin melakukannya di oneliner.
echo "mail content" | sendmail emailataddres.com
Mengirimnya tanpa subjek.
Baris subjek harus ada sebelum konten Mail, jadi saya mencari sesuatu di sepanjang baris:
echo "mail content" | prepend "Subject: All that matters" | sendmail emailataddres.com
sed dan awk cenderung sangat canggung untuk digunakan dan diingat.
EDIT : Hanya untuk memperjelas: gema "Konten email" hanyalah contoh ilustrasi. Saya harus bisa menambahkan beberapa hal ke stdout stream dari sumber apa pun. misal: ifconfig, zcat, dll.
command-line
bash
posix
AndreasT
sumber
sumber
echo -e "Subject: All that matters\nmail content"
? Atau lebih platform agnostik:printf 'Subject: %s\n%s\n' "All that matters" "mail content"
. Anda juga bisa menulis skrip kecil yang hanya membutuhkan dua argumen string untuk membuat satu kalimat yang lebih sederhana.prepend
dilakukan Untuk mengetahui cara menambahkan sesuatu, Anda harus menunggu hingga perintah upstream (mis.echo
) Mengirim EOF, sehingga Anda dapat memasukkan data Anda di depannya dalam aliran sebelum meneruskannya ke stdout untuk mendapatkan piped ke sendmail. Kedengarannya seperti tugas untuk skrip Ruby atau Python yang agak pendek.mail
perintah (kadang-kadang disebut bsdmail) alih-alihsendmail
secara langsung.mail
mengambil-s subject
opsi opsional , misalnya:ifconfig -a | mail -s 'Current ifconfig output' [email protected]
Jawaban:
Saya cukup yakin bahwa ada solusi yang lebih baik, tetapi ini harus dilakukan.
sumber
printf
alih-alih yang keduaecho
dan Anda harus baikecho -n
Gunakan apa yang dikatakan Claudius atau buat sendiri:
~ / bin / prepend:
misalnya:
sumber
Ini terinspirasi oleh jawaban Claudius.
Jika Anda tidak ingin jeda antara output Anda, tambahkan
-n
param. Ini akan terlihat seperti:$ echo 1 | (echo -n 2 && cat)
Yang akan memberi:
21
sumber
-n
di tempat yang salah. Bagaimanapun, Pembaruan harus memberikan "21 \ n" jika Anda ingin menyingkirkan \ n maka tambahkan saja -n sebelum 1.Dari potongan-potongan yang saya kumpulkan ... Anda bisa melakukan sesuatu seperti ini:
Perhatikan bahwa saya tidak menutup tanda kutip pada baris pertama ... karena tidak semua shell menerjemahkannya
\n
menjadi karakter baris baru ... tapi saya belum menemukan yang tidak memproses baris baru yang sebenarnya di dalam tanda kutip.Ketika sebuah perintah tertutup dalam karakter `, itu akan dieksekusi dan output akan disuntikkan di tempat. Ingatlah bahwa sedikit kode ini sedikit berbahaya karena dimungkinkan untuk menyuntikkan perintah tambahan yang dapat dengan mudah membahayakan sistem Anda ...
**** edit **** Mengikuti saran Claudius, opsi yang lebih bersih akan terlihat seperti ini:
Bahkan dengan templat itu, ia dapat dieksploitasi.
sumber
$()
daripada `` karena seharusnya lebih portabel (dan juga lebih mudah dibaca). Selain itu, Anda dapat menggunakanecho
's-e
pilihan untuk membuatnya menerjemahkan baris (echo -e "1\n2"
) atau hanya menggunakan printf seperti yang disarankan oleh Daniel dalam komentar pertama.Anda dapat menambahkan ke output pipa menggunakan substitusi proses :
sumber