Конструкция bash pipe для добавления чего-либо в стандартный вывод предыдущей команды
Я хочу использовать 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 и т. д.
4 ответа
$ echo 1 | (echo 2 && cat)
2
1
Я почти уверен, что есть более хорошее решение, но это должно сработать.
Или используйте то, что сказал Клавдий, или сделайте свое:
~ / Bin/ перед именем:
#!/bin/sh
echo -en "$@"
cat -
например:
$ echo "Splendid SUPANINJA! Let's do it!" |\
prepend "Subject: Venetian Snares\n"
Subject: Venetian Snares
Splendid SUPANINJA! Lets do it!
Это вдохновлено ответом Клавдия.
Если вы не хотите прерывать возврат между вашими выходами, добавьте -n
пары. Это будет выглядеть так:
$ echo 1 | (echo -n 2 && cat)
Который даст:
21
Вы можете перейти к конвейерному выводу, используя подстановку процесса:
$ echo "mail content" | cat <(echo "Subject: All that matters") -
Subject: All that matters
mail content
Из кусочков, которые я собрал... вы можете сделать что-то вроде этого:
echo "Subject: All that matters
`echo "mail content"`" | sendmail blah@blahblah
Обратите внимание, что я не закрывал кавычки в первой строке... потому что не все оболочки переводят \n
в символ новой строки... но мне еще предстоит найти тот, который не будет обрабатывать фактическую новую строку внутри кавычек.
Когда команда заключена в символ `, она будет выполнена, а вывод будет введен на месте. Имейте в виду, что этот фрагмент кода немного опасен, так как можно встроить дополнительные команды, которые могут легко скомпрометировать вашу систему...
**** edit **** Следуя совету Клавдия, более чистый вариант будет выглядеть так:
echo -e "Subject: All that matters \n $(echo "mail content") |sendmail blah@blahblah
Даже с этим шаблоном его можно использовать.