Bash Shell一行中多次重定向

你想将输出重定向到多个地方。

解决方案

用带有文件描述符编号的重定向打开所有要使用的文件。例如:

divert 3> file.three 4> file.four 5> file.five 6> else.where

其中,divert 可能是包含各种命令的 shell 脚本,你希望将其输出发送到不同地方。例如,divert 可能包含 echo option $OPTSTR >&5。也就是说,shell 脚本 divert 可以将其输出定向到不同的描述符,调用程序(invoking program)可以将描述符指向不同的目标。

与此类似,如果 divert 是一个 C 程序的可执行文件,则无须任何 open() 调用就可以向文件描述符 3、4、5、6 写入。

讨论

前面介绍过,每个文件描述符都由一个数字(从 0 开始)代表:标准输入是 0,标准输出是 1,标准错误是 2。如果不指定数字,则假定为 1。这意味着可以用略显啰唆的写法 1>(而不是简单的 >)跟上文件名来重定向标准输出,不过其实没这个必要,便捷写法 > 就挺好。可以在 shell 中打开任意数量的文件描述符,令其指向各种文件,这样一来,随后在命令行上调用的程序就不用再费事了,直接就可以使用这些已打开的文件描述符。

我们不建议这么做,因为这种技术不仅脆弱,而且具有不必要的复杂性,不过倒是挺有意思的。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!