Bash 如果在一个命令行中有多个重定向操作符,它们是如何工作的?(猛击)
如果重定向运算符在一个命令中有多个。(猛击)Bash 如果在一个命令行中有多个重定向操作符,它们是如何工作的?(猛击),bash,unix,Bash,Unix,如果重定向运算符在一个命令中有多个。(猛击) 相同的重定向运算符。 例如 arg_1>arg_2>arg_3>arg_4 不同的重定向运算符。 例如 arg_1arg_3foo>bar即可实现此效果。试试看?所有的arg_x文件都将被创建和截断,但输出将重定向到最后一个文件。一些shell将冲突重定向视为错误,但我相信bash只是覆盖了先前的冲突重定向,所以最后一个重定向生效。我测试了一些案例命令> 3,C>1。C<4。C>5。C<6。C < /代码>如果命令中出现错误(“<4。C:4文件。”
例如
arg_1>arg_2>arg_3>arg_4
例如
arg_1arg_3arg_6
如果在一个命令行中有多个重定向运算符,这些运算符是如何工作的?将从左到右计算重定向。把foo看作stdout=foo的一种。因此,在
prog >foo >bar
与设置相对应
stdout=foo
stdout=bar
,这意味着总的来说,stdout最终会重定向到bar(就像先将变量设置为一个值,然后再设置为其他值),但由于将stdout设置为文件也会产生创建此文件的效果,所以foo和bar最终都会存在,即使没有任何内容会写入foo
同样地
prog >foo 2>&1 >bar
我会做一个
stdout=foo
stderr=stdout
stdout=bar
你会让stdout去酒吧,stderr去foo。当然,在实践中,您只需编写
prog2>foo>bar即可实现此效果。试试看?所有的
文件都需要存在,但输入将从最后一个文件重定向。所有的>arg_x
文件都将被创建和截断,但输出将重定向到最后一个文件。一些shell将冲突重定向视为错误,但我相信bash
只是覆盖了先前的冲突重定向,所以最后一个重定向生效。我测试了一些案例<代码>命令> 3,C>1。C<4。C>5。C<6。C < /代码>如果命令中出现错误(“<4。C:4文件。”或“命令未找到”),则不确定剩余命令是否结束而不执行。them@TomKarzes什么是冲突重定向?@gigi冲突重定向是你文章的主题。如果您有多个
或多个f3
。重定向到f1
被重定向到f2
覆盖,而重定向到f3
又被覆盖。