我有一个文件,我目前发送的电子邮件是这样的
/usr/sbin/sendmail me@gmail.com < f1.txt
我对文件进行了一些更改,以便它包含一个占位符,我使用sed进行调整,如此
sed -e s/PLACEHOLDER/TEST/g f1.txt
我如何结合2?我以为它会像
那样完成/usr/sbin/sendmail me@gmail.com <(sed -e s/PLACEHOLDER/TEST/g f1.txt)
但那'挂起'。有人能指出我正确的方向吗?
答案 0 :(得分:7)
你差不多了。
您的命令行是:
/usr/sbin/sendmail me@gmail.com <(sed -e s/PLACEHOLDER/TEST/g f1.txt)
您正在使用 Process Substitution 将<( .. )
构造中的sed命令转换为临时文件句柄,该句柄将由sendmail读取。不幸的是,您实际上并没有从该临时文件句柄重定向。
修复应该只是在命令替换之前添加<
:
/usr/sbin/sendmail me@example.com < <(sed -e 's/PLACEHOLDER/TEST/g' f1.txt)
↑
也就是说,最好使用PIPES,以避免对bash的依赖:
sed -e 's/PLACEHOLDER/TEST/g' f1.txt | /usr/sbin/sendmail me@example.com
最终的效果是相同的,但是这个过程稍微简单一些,并且可以移植到不支持进程替换的POSIX shell解释器。