이전 명령의 stdoutput 앞에 무언가를 추가하는 bash 파이프 구성 Mail 내용 앞에

sendmail을 사용하여 물건을 보내려고하고 oneliner에서하고 싶습니다.

echo "mail content" | sendmail emailataddres.com 

제목없이 보냅니다.

제목 줄은 Mail 내용 앞에 와야하므로 다음 줄을 따라 무언가를 찾고 있습니다.

echo "mail content" | prepend "Subject: All that matters" | sendmail emailataddres.com 

sed와 awk는 사용하고 기억하기가 정말 어색합니다.

편집 : 명확하게 : echo “메일 내용”은 단지 예입니다. 모든 소스의 stdout 스트림 앞에 물건을 추가 할 수 있어야합니다. 예 : ifconfig, zcat 등



답변

$ echo 1 | (echo 2 && cat)
2
1

더 좋은 해결책이 있다고 확신하지만 이것이해야합니다.


답변

Claudius의 말을 사용하거나 직접 작성하십시오.

~ / bin / prepend :

#!/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!


답변

이것은 Claudius의 답변에서 영감을 얻었습니다.

출력 사이에 중단 리턴을 원하지 않으면 -n매개 변수를 추가하십시오 . 이것은 다음과 같습니다

$ echo 1 | (echo -n 2 && cat)

어느 것이 줄 것인가?

21


답변

내가 수집 한 조각에서 … 당신은 다음과 같이 할 수 있습니다 :

echo "Subject: All that matters
`echo "mail content"`" | sendmail blah@blahblah

첫 번째 줄에서 따옴표를 닫지 않았습니다 … 모든 쉘 \n이 줄 바꿈 문자로 변환되지 는 않지만 따옴표 내에서 실제 줄 바꿈을 처리하지 않는 줄을 찾지 못했습니다.

명령이`문자로 묶이면 명령이 실행되고 출력이 제자리에 주입됩니다. 이 코드는 시스템을 쉽게 손상시킬 수있는 추가 명령을 인라인으로 삽입 할 수 있으므로 약간 위험합니다.

**** edit **** Claudius의 조언에 따라 더 깨끗한 옵션은 다음과 같습니다.

echo -e "Subject: All that matters \n $(echo "mail content") |sendmail blah@blahblah

해당 템플릿을 사용하더라도 악용 될 수 있습니다.


답변

프로세스 대체를 사용하여 파이프 출력 앞에 추가 할 수 있습니다 .

$ echo "mail content" | cat <(echo "Subject: All that matters") -
Subject: All that matters
mail content


답변