是否有一个sedtodo就地编辑的调用,没有可在Linux和Mac上运行的备份?虽然BSD sed随OS X似乎需要sed -i '' …,在GNU sedLinux的发行版通常都与解释的报价为空,输入文件名(而不是备份扩展),并且需要sed -i …替代.
是否有任何命令行语法适用于这两种风格,所以我可以在两个系统上使用相同的脚本?
理想情况下,这可以在shell中编写脚本,但Perl或Python可以.C代码可能会有所帮助,但可能会降低成本/收益.
我认识到重定向到FIFO(命名管道)可能与实际管道无法区分,这就足以说明我并不真正关心的边缘情况.
严格的POSIX解决方案是最好的,UNIX/Linux变体独立是最好的,但至少在Darwin(MacOS X)上运行的东西是我现在需要的.
在你写回答之前 - 我已经知道了test -t - 这将告诉我stdout是否是一个终端(在这种情况下它绝对不是一个管道 - 但它不会告诉我stdout是否已被重定向到一个文件,非终端字符设备,或UNIX域套接字而不是管道.
预期用例:我有一个命令应该在shell的反引号中运行,以便它可以输出设置环境变量的命令.如果stdout没有重定向到管道,我希望命令中止错误,因为在那种情况下它肯定没有被调用eval `mycommand`;.
如果在反引号中运行命令时shell会设置一些特殊的环境变量会有所帮助,但由于它可能特定于bash或zsh或其他东西,因此管道检测更为重要.