Quero usar o sendmail para me enviar coisas e quero fazê-lo em um oneliner.
echo "mail content" | sendmail emailataddres.com
Envia sem assunto.
A linha de assunto deve vir antes do conteúdo do Mail, então estou procurando algo ao longo das linhas de:
echo "mail content" | prepend "Subject: All that matters" | sendmail emailataddres.com
sed e awk tendem a ser realmente difíceis de usar e lembrar.
EDIT : Apenas para esclarecer: echo "Conteúdo de email" é apenas um exemplo ilustrativo. Eu preciso ser capaz de acrescentar coisas aos fluxos stdout de qualquer fonte. por exemplo: ifconfig, zcat, etc.
command-line
bash
posix
AndreasT
fonte
fonte
echo -e "Subject: All that matters\nmail content"
? Ou mais agnóstica de plataforma:printf 'Subject: %s\n%s\n' "All that matters" "mail content"
. Você também pode escrever um pequeno script que use apenas os dois argumentos de string para criar uma linha única ainda mais simples.prepend
fazer? Para saber como acrescentar algo antes, é necessário aguardar até que o comando upstream (por exemploecho
) envie o EOF, para que você possa inserir seus dados antes dele no fluxo antes de passá-lo para o stdout para receber o sendmail. Soa como uma tarefa para um script Shorty Ruby ou Python.mail
comando (às vezes chamado de bsdmail) em vez desendmail
diretamente.mail
toma uma-s subject
opção opcional , por exemplo:ifconfig -a | mail -s 'Current ifconfig output' [email protected]
Respostas:
Tenho certeza de que existe uma solução melhor, mas isso deve funcionar.
fonte
printf
em vez do segundoecho
e você deve ser finoecho -n
Use o que Cláudio disse ou faça o seu:
~ / bin / prepend:
por exemplo:
fonte
Isso é inspirado na resposta de Cláudio.
Se você não deseja um retorno de interrupção entre suas saídas, adicione o
-n
parâmetro Será parecido com:$ echo 1 | (echo -n 2 && cat)
O que dará:
21
fonte
-n
no lugar errado. De qualquer forma, a actualização deve dar "21 \ n" se você quiser se livrar do \ n seguida, basta adicionar um -n antes do 1.A partir das peças que reuni ... você poderia fazer algo assim:
Observe que eu não fechei as aspas na primeira linha ... porque nem todas as conchas convertem o
\n
caractere em uma nova linha ... mas ainda não encontrei uma que não processe uma nova linha real dentro das aspas.Quando um comando é colocado no caracter `, ele será executado e a saída será injetada no local. Lembre-se de que esse código é um pouco perigoso, pois é possível injetar comandos adicionais em linha que podem comprometer seu sistema facilmente ...
**** editar **** Seguindo o conselho de Claudius, uma opção mais limpa seria assim:
Mesmo com esse modelo, ele poderia ser explorado.
fonte
$()
do que ``, pois deve ser mais portátil (e também mais legível). Além disso, você pode usarecho
a-e
opção de fazê-lo traduzir novas linhas (echo -e "1\n2"
) ou apenas usar printf, conforme sugerido por Daniel no primeiro comentário.Você pode anexar à saída canalizada usando substituição de processo :
fonte