我编写了一个脚本,将输入文件发送到 CPP,然后发送到 grep,然后发送到某个程序:
cpp $1 | grep -v "#" | theprogram
Run Code Online (Sandbox Code Playgroud)
但是,“theprogram”要求输入以某个常量行“theprogram-1.0”开头。所以,我想将该常量行添加到 grep 的输出之前,就在它被发送到“theprogram”之前。
当然,我可以使用临时文件来完成所有这些……但我确信有一种方法可以在一行 shell 管道中完成如此简单的任务,而无需临时文件。诀窍是什么?
您可以用括号将一系列命令括起来。括号内的每个命令都可以访问相同的 stdin、stdout 和 stderr。在这里,echo将发送到标准输出但不会改变grep看到的标准输入。
cpp $1 | (echo 'your constant line here'; grep -v "#") | theprogram
Run Code Online (Sandbox Code Playgroud)
如Shell command language: grouping commands 中所述,可以使用大括号代替括号进行分组。使用大括号稍微更有效,因为不会创建子shell,但它会呈现更复杂的语法:在 之后需要一个字段分隔符,在 之前需要{一个分隔符,例如;或 换行符}。但是有几个人建议将其作为替代方案,所以这里是:
cpp $1 | { echo 'your constant line here'; grep -v "#"; } | theprogram
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1582 次 |
| 最近记录: |