如果在一个命令行中有多个重定向运算符,这些是如何工作的?(bash)



if重定向运算符多合一命令。(bash(

  1. 相同的重定向运算符
    示例
    arg_1 > arg_2 > arg_3 > arg_4

  2. 不同的重定向运算符
    示例
    arg_1 < arg_2 > arg_3 < arg_4 < arg_5 > arg_6

我知道命令中是否有一个重定向运算符如何工作。

但是如果在一个命令行中有多个重定向运算符,这些是如何工作的?

重定向是从左到右计算的。将>foo视为stdout=foo。因此中的重定向

prog >foo >bar 

对应于设置

stdout=foo
stdout=bar

,这意味着总的来说,stdout最终会重定向到bar(就像先将变量设置为一个值,然后再设置为某个不同的值时一样(,但由于将stdout设置为文件也有创建该文件的效果,因此foobar最终都会存在,即使不会将任何内容写入foo

类似地,

prog >foo 2>&1 >bar

会做

stdout=foo
stderr=stdout
stdout=bar

stdout将转到bar,stderr将转到foo。当然,在实践中,您只需编写prog 2>foo >bar即可达到此效果。

最新更新