我知道在Linux中,要将屏幕输出重定向到文件,可以使用>或tee。然而,我不确定为什么部分输出仍然输出到屏幕而没有写入文件。
是否有方法将所有输出重定向到文件?
我知道在Linux中,要将屏幕输出重定向到文件,可以使用>或tee。然而,我不确定为什么部分输出仍然输出到屏幕而没有写入文件。
是否有方法将所有输出重定向到文件?
当前回答
这可能是标准错误。您可以重定向它:
... > out.txt 2>&1
其他回答
使用此-“此处需要命令”>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
/dev/null是一个空设备,它接受您想要的任何输入并将其丢弃。它可用于抑制任何输出。
命令:
foo >> output.txt 2>&1
附加到output.txt文件,而不替换内容。
您可以稍后使用exec命令重定向任何命令的所有stdout/stderr输出。
示例脚本:
exec 2> your_file2 > your_file1
your other commands.....
所有POSIX操作系统都有三个流:stdin、stdout和stderr。stdin是输入,它可以接受stdout或stderr。stdout是主要输出,使用>、>>或|重定向。stderr是错误输出,它是单独处理的,以便不会将任何异常传递给命令或写入可能会中断的文件;通常,这会被发送到某种日志中,或者直接转储,即使在重定向stdout时也是如此。要将两者重定向到同一位置,请使用:
$command&>/some/file
编辑:感谢Zack指出上述解决方案不可移植——请改用:
$command > file 2>&1
如果要消除错误,请执行以下操作:
$command 2> /dev/null
感谢osexp2003和j.a…
而不是:
&>> your_file.log
在以下行后面:
crontab -e
我使用:
#!/bin/bash
exec &>> your_file.log
…
在BASH脚本的开头。
优点:脚本中有日志定义。有利于Git等。