bash 管道构造将某些内容添加到上一个命令的 stdoutput 之前

And*_*asT 26 bash command-line posix

我想使用 sendmail 向我发送东西,并想在 oneliner 中完成。

echo "mail content" | sendmail emailataddres.com 
Run Code Online (Sandbox Code Playgroud)

发送它没有主题。

主题行必须在邮件内容之前,所以我正在寻找以下内容:

echo "mail content" | prepend "Subject: All that matters" | sendmail emailataddres.com 
Run Code Online (Sandbox Code Playgroud)

sed 和 awk 往往很难使用和记住。

编辑:只是为了澄清:回声“邮件内容”只是一个说明性的例子。我需要能够将东西添加到来自任何来源的 stdout 流。例如:ifconfig、zcat 等。

小智 47

$ echo 1 | (echo 2 && cat)
2
1
Run Code Online (Sandbox Code Playgroud)

我很确定有一个更好的解决方案,但这应该可以。

  • 简单、实用且易于演示。+1 (2认同)
  • @VenomFangs 使用 `printf` 而不是第二个 `echo`,你应该没问题 (2认同)

Яро*_*лин 8

要么使用克劳迪斯所说的,要么自己制作:

~/bin/前置:

#!/bin/sh
echo -en "$@"
cat -
Run Code Online (Sandbox Code Playgroud)

例如:

$ echo "Splendid SUPANINJA! Let's do it!" |\
     prepend "Subject: Venetian Snares\n"

Subject: Venetian Snares
Splendid SUPANINJA! Lets do it!
Run Code Online (Sandbox Code Playgroud)


Ven*_*ngs 6

这是受到克劳迪斯回答的启发。

如果您不想在输出之间中断返回,请添加-n参数。这将如下所示:

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

这将给出:

21