Ray*_*yne 712 linux bash io-redirection
我知道在Linux中,要将屏幕输出重定向到文件,我可以使用>或tee.但是,我不确定为什么部分输出仍然输出到屏幕而不写入文件.
有没有办法将所有输出重定向到文件?
Op *_*kel 1135
该部分写入stderr,用于2>重定向它.例如:
foo > stdout.txt 2> stderr.txt
Run Code Online (Sandbox Code Playgroud)
或者如果你想要在同一个文件中:
foo > allout.txt 2>&1
Run Code Online (Sandbox Code Playgroud)
注意:这适用于(ba)sh,检查shell是否有正确的语法
Bry*_*gee 144
所有POSIX操作系统都有3个流:stdin,stdout和stderr.stdin是输入,可以接受stdout或stderr.stdout是主输出,其被重定向与>,>>,或|.stderr是错误输出,它是单独处理的,因此任何异常都不会传递给命令或写入可能会中断的文件; 通常,即使重定向stdout,也会将其发送到某种日志或直接转储.要将两者重定向到同一个地方,请使用:
command &> /some/file
编辑:感谢Zack指出上述解决方案不可移植 - 请改用:
*command* > file 2>&1
Run Code Online (Sandbox Code Playgroud)
如果要使错误静音,请执行以下操作:
*command* 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
Sag*_*ain 84
例如,要在控制台和文件中获取输出file.txt.
make 2>&1 | tee file.txt
Run Code Online (Sandbox Code Playgroud)
注意:&(in 2>&1)指定1不是文件名而是文件描述符.
Ind*_*our 44
用这个 - "require command here" > log_file_name 2>&1
Unix/Linux中重定向操作符的详细描述.
>运算符通常将输出重定向到文件,但它可以是设备.你也可以使用>>来追加.
如果未指定数字,则会假定标准输出流,但您也可以重定向错误
> file redirects stdout to file
1> file redirects stdout to file
2> file redirects stderr to file
&> file redirects stdout and stderr to file
Run Code Online (Sandbox Code Playgroud)
/ dev/null是一个空设备,它接受你想要的任何输入并抛弃它.它可以用来抑制任何输出.
qrä*_*bnö 29
归功于osexp2003和ja ...
而不是放
&>> your_file.log
Run Code Online (Sandbox Code Playgroud)
在一条线后面
crontab -e
Run Code Online (Sandbox Code Playgroud)
我用
#!/bin/bash
exec &>> your_file.log
…
Run Code Online (Sandbox Code Playgroud)
在BASH脚本的开头.
优点:您的脚本中有日志定义.适合Git等
ose*_*003 16
您可以使用exec命令稍后重定向任何命令的所有stdout/stderr输出.
示例脚本:
exec 2> your_file2 > your_file1
your other commands.....
Run Code Online (Sandbox Code Playgroud)
ell*_*kie 15
命令:
foo >> output.txt 2>&1
Run Code Online (Sandbox Code Playgroud)
附加到output.txt文件,而不替换内容.