Я хочу использовать sendmail для отправки мне материала и хочу сделать это в личном кабинете.
echo "mail content" | sendmail emailataddres.com
Посылает это без темы.
Строка темы должна предшествовать содержимому Mail, поэтому я ищу что-то вроде:
echo "mail content" | prepend "Subject: All that matters" | sendmail emailataddres.com
sed и awk, как правило, очень неудобны в использовании и запоминании.
РЕДАКТИРОВАТЬ : Просто чтобы уточнить: echo "Почтовый контент" является просто иллюстративным примером. Мне нужно иметь возможность добавлять материал к потокам stdout из любого источника. например: ifconfig, zcat и т. д.
command-line
bash
posix
AndreasT
источник
источник
echo -e "Subject: All that matters\nmail content"
? Или более независимой от платформыprintf 'Subject: %s\n%s\n' "All that matters" "mail content"
. Вы также можете написать небольшой скрипт, который просто принимает два строковых аргумента, чтобы сделать еще более простой однострочный.prepend
делать? Чтобы узнать, как что-то добавить, вы должны подождать, пока вышестоящая команда (например,echo
) не отправит EOF, чтобы вы могли вставить свои данные перед этим в поток, прежде чем передать их в stdout, чтобы получить канал для sendmail. Звучит как задача для короткого скрипта на Ruby или Python.mail
команду (иногда называемую bsdmail) вместоsendmail
прямой.mail
принимает необязательный-s subject
параметр, например:ifconfig -a | mail -s 'Current ifconfig output' me@someaddr.com
Ответы:
Я почти уверен, что есть более хорошее решение, но это должно сработать.
источник
printf
вместо второго,echo
и у вас все будет хорошоecho -n
Или используйте то, что сказал Клавдий, или сделайте свое:
~ / Bin / перед именем:
например:
источник
Это вдохновлено ответом Клавдия.
Если вы не хотите возврата между выходами, добавьте
-n
параметр. Это будет выглядеть так:$ echo 1 | (echo -n 2 && cat)
Который даст:
21
источник
-n
в том месте. В любом случае, обновление должно выдавать «21 \ n», если вы хотите избавиться от \ n, а затем просто добавьте -n перед 1.Из кусочков, которые я собрал ... вы можете сделать что-то вроде этого:
Обратите внимание, что я не закрывал кавычки в первой строке ... потому что не все оболочки переводят их
\n
в символ новой строки ... но мне еще предстоит найти такую, которая не будет обрабатывать фактическую новую строку внутри кавычек.Когда команда заключена в символ `, она будет выполнена, а вывод будет введен на месте. Имейте в виду, что этот фрагмент кода немного опасен, так как можно встроить дополнительные команды, которые могут легко скомпрометировать вашу систему ...
**** edit **** Следуя совету Клавдия, более чистый вариант будет выглядеть так:
Даже с этим шаблоном его можно использовать.
источник
$()
, чем ``, поскольку он должен быть более переносимым (и также более читаемым). Кроме того, вы можете использовать опциюecho
's',-e
чтобы заставить ее переводить символы новой строки (echo -e "1\n2"
), или просто использовать printf, как предложено Дэниелом в первом комментарии.Вы можете перейти к конвейерному выводу, используя подстановку процесса :
источник