如何将stdout和stderr重定向到文件

sdm*_*_gr 277 bash stdout stderr

我正在运行一个bash脚本,它创建一个日志文件来执行命令

我使用以下内容

Command1 >> log_file
Command2 >> log_file
Run Code Online (Sandbox Code Playgroud)

这仅发送标准输出,而不是终端上显示的标准错误.

我可以记录记录到文件的stderr和stdout吗?

Mat*_*Mat 411

如果要登录同一文件:

command1 >> log_file 2>&1
Run Code Online (Sandbox Code Playgroud)

如果你想要不同的文件:

command1 >> log_file 2>> err_file
Run Code Online (Sandbox Code Playgroud)

  • 只是为了拯救别人的挫折感,请注意顺序很重要:`>>>&1`需要在`>> log_file`之后发生. (122认同)
  • `>>`附加到文件,`>`覆盖.搜索"shell重定向"以获取更多详细信息. (6认同)
  • 并查看输出,同时它也会保存到文件中:`command 2>&1 | tee log_file` (6认同)
  • 为什么`>>`而不是`>`? (4认同)
  • 一种变体,它可以查看而不是保存log_file,例如当`make`呕吐出一万个滚动屏幕的错误:`vi <(make 2>&1)`. (4认同)

Cos*_*atu 185

重定向两者的最简单语法是:

command &> logfile
Run Code Online (Sandbox Code Playgroud)

如果要附加到文件而不是覆盖:

command &>> logfile
Run Code Online (Sandbox Code Playgroud)

  • @CostiCiudatu&>>运算符似乎不适用于Mac OS X; 更安全地使用Mat的解决方案imo. (9认同)
  • `&>`现在在OS X 10.11.1(似乎是bash 3.2)上按预期工作,仅用于记录. (6认同)
  • @JamesFennell你是对的,我没有意识到这一点.我赞成了接受的答案:) (4认同)
  • 不确定何时添加了此运算符,但在旧版本的Bash中可能无法使用它.它似乎正在我的机器上工作,运行Gnu bash v3.2.48. (3认同)
  • http://www.tldp.org/LDP/abs/html/io-redirection.html提到这种语法功能"从Bash 4开始,最终版本". (2认同)

小智 32

你可以像2>&1那样做:

 command > file 2>&1
Run Code Online (Sandbox Code Playgroud)

  • +1,`2>&1`将文件描述符2(stderr)重定向到文件描述符1(stdout) (12认同)
  • @btomtom5 `&amp;` 表示文件描述符。否则如何写入名为“1”的文件? (2认同)

bla*_*out 6

使用:

command >>log_file 2>>log_file
Run Code Online (Sandbox Code Playgroud)