Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如果在一个命令行中有多个重定向操作符,它们是如何工作的?(猛击)_Bash_Unix - Fatal编程技术网

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
    又被覆盖。