要将stdout重定向到Bash中的截断文件,我知道要使用:
cmd > file.txt
要在Bash中重定向stdout,追加到文件,我知道要使用:
cmd >> file.txt
要将stdout和stderr重定向到截断的文件,我知道要使用:
cmd &> file.txt
如何重定向附加到文件的stdout和stderr? cmd &>> file.txt 对我不起作用 .
cmd &>> file.txt
cmd >>file.txt 2>&1
Bash从左到右执行重定向,如下所示:
>>file.txt :在附加模式下打开 file.txt 并在那里重定向 stdout .
>>file.txt
file.txt
stdout
2>&1 :将 stderr 重定向到“ stdout 当前正在进行中” . 在这种情况下,这是一个以追加模式打开的文件 . 换句话说, &1 重用 stdout 当前使用的文件描述符 .
2>&1
stderr
&1
有两种方法可以执行此操作,具体取决于您的Bash版本 .
经典便携( Bash pre-4 )方式是:
cmd >> outfile 2>&1
一种不可移植的方式,从 Bash 4 开始
cmd &>> outfile
(类似于 &> outfile )
&> outfile
对于良好的编码风格,你应该
决定是否关注可移植性(然后使用经典方式)
决定是否可以将Bash pre-4的可移植性作为一个问题(然后使用经典方式)
无论你使用哪种语法,都不要在同一个脚本中更改它(混乱!)
如果您的脚本已经以 #!/bin/sh 开头(无论是否有意),那么Bash 4解决方案以及通常任何特定于Bash的代码都不是可行的方法 .
#!/bin/sh
还记得Bash 4 &>> 只是更短的语法 - 它没有引入任何新功能或类似的东西 .
&>>
这里描述的语法是(除了其他重定向语法之外):http://bash-hackers.org/wiki/doku.php/syntax/redirection#appending_redirected_output_and_error_output
这应该工作正常:
your_command 2>&1 | tee -a file.txt
它会将所有日志存储在file.txt中,并将它们转储到终端上 .
试试这个
You_command 1>output.log 2>&1
您对&> x.file的使用在bash4中有效 . 对不起:(
0,1,2 ... 9是bash中的文件描述符 .
0代表 stdin ,1代表 stdout ,2代表 stderror . 任何其他临时使用都可以使用3~9 .
stdin
stderror
可以使用operator > 或 >> (append)将任何文件描述符重定向到其他文件描述符或文件 .
>
>>
用法:< file_descriptor > > < filename | &file_descriptor >
请参考http://www.tldp.org/LDP/abs/html/io-redirection.html
在Bash 4(以及ZSH 4.3.11)中:
cmd &>>outfile
刚开箱即用
在Bash中,您还可以明确指定重定向到不同的文件:
cmd >log.out 2>log_error.out
附加将是:
cmd >>log.out 2>>log_error.out
6 回答
Bash从左到右执行重定向,如下所示:
>>file.txt
:在附加模式下打开file.txt
并在那里重定向stdout
.2>&1
:将stderr
重定向到“stdout
当前正在进行中” . 在这种情况下,这是一个以追加模式打开的文件 . 换句话说,&1
重用stdout
当前使用的文件描述符 .有两种方法可以执行此操作,具体取决于您的Bash版本 .
经典便携( Bash pre-4 )方式是:
一种不可移植的方式,从 Bash 4 开始
(类似于
&> outfile
)对于良好的编码风格,你应该
决定是否关注可移植性(然后使用经典方式)
决定是否可以将Bash pre-4的可移植性作为一个问题(然后使用经典方式)
无论你使用哪种语法,都不要在同一个脚本中更改它(混乱!)
如果您的脚本已经以
#!/bin/sh
开头(无论是否有意),那么Bash 4解决方案以及通常任何特定于Bash的代码都不是可行的方法 .还记得Bash 4
&>>
只是更短的语法 - 它没有引入任何新功能或类似的东西 .这里描述的语法是(除了其他重定向语法之外):http://bash-hackers.org/wiki/doku.php/syntax/redirection#appending_redirected_output_and_error_output
这应该工作正常:
它会将所有日志存储在file.txt中,并将它们转储到终端上 .
试试这个
您对&> x.file的使用在bash4中有效 . 对不起:(
这里有一些额外的提示 .
0,1,2 ... 9是bash中的文件描述符 .
0代表
stdin
,1代表stdout
,2代表stderror
. 任何其他临时使用都可以使用3~9 .可以使用operator
>
或>>
(append)将任何文件描述符重定向到其他文件描述符或文件 .用法:< file_descriptor > > < filename | &file_descriptor >
请参考http://www.tldp.org/LDP/abs/html/io-redirection.html
在Bash 4(以及ZSH 4.3.11)中:
刚开箱即用
在Bash中,您还可以明确指定重定向到不同的文件:
附加将是: