将sed输出重定向到stdin

Lie*_*uwe 2 bash

我有一个文件,我目前发送的电子邮件是这样的

/usr/sbin/sendmail me@gmail.com < f1.txt
Run Code Online (Sandbox Code Playgroud)

我对文件进行了一些更改,以便它包含一个占位符,我使用sed进行调整

sed -e s/PLACEHOLDER/TEST/g f1.txt
Run Code Online (Sandbox Code Playgroud)

我如何结合2?我以为会这样做

/usr/sbin/sendmail me@gmail.com <(sed -e s/PLACEHOLDER/TEST/g f1.txt)
Run Code Online (Sandbox Code Playgroud)

但那"挂起".谁能指出我正确的方向?

gho*_*oti 8

你几乎得到了它.

你的命令行是:

/usr/sbin/sendmail me@gmail.com <(sed -e s/PLACEHOLDER/TEST/g f1.txt)
Run Code Online (Sandbox Code Playgroud)

您正在使用Process Substitution<( .. )构造中的sed命令转换为临时文件句柄,该句柄将由sendmail读取.不幸的是,您实际上并没有从该临时文件句柄重定向.

修复应该只是<在命令替换之前添加一个:

/usr/sbin/sendmail me@example.com < <(sed -e 's/PLACEHOLDER/TEST/g' f1.txt)
                                  ?
Run Code Online (Sandbox Code Playgroud)

也就是说,最好使用PIPES,以避免依赖于bash:

sed -e 's/PLACEHOLDER/TEST/g' f1.txt | /usr/sbin/sendmail me@example.com
Run Code Online (Sandbox Code Playgroud)

最终的效果是相同的,但过程稍微简单一些,并且可以移植到不支持进程替换的POSIX shell解释器.