在Unix shell中,如果我想要组合stderr并stdout进入stdout流进行进一步操作,我可以在命令的末尾添加以下内容:
2>&1
Run Code Online (Sandbox Code Playgroud)
所以,如果我想head在输出上使用g++,我可以这样做:
g++ lots_of_errors 2>&1 | head
Run Code Online (Sandbox Code Playgroud)
所以我只能看到前几个错误.
我总是很难记住这一点,而且我不得不去查阅它,主要是因为我不完全理解这个特殊技巧的语法.
有人可以打破这个并按字符解释具体2>&1 意义吗?
我知道在Linux中,要将屏幕输出重定向到文件,我可以使用>或tee.但是,我不确定为什么部分输出仍然输出到屏幕而不写入文件.
有没有办法将所有输出重定向到文件?
我想将进程的stdout和stderr重定向到单个文件.我怎么用Bash做到这一点?
我正在运行一个bash脚本,它创建一个日志文件来执行命令
我使用以下内容
Command1 >> log_file
Command2 >> log_file
Run Code Online (Sandbox Code Playgroud)
这仅发送标准输出,而不是终端上显示的标准错误.
我可以记录记录到文件的stderr和stdout吗?
echo "text" >> 'Users/Name/Desktop/TheAccount.txt'
Run Code Online (Sandbox Code Playgroud)
如何创建文件(如果文件不存在),如果它已经存在则覆盖它.现在这个脚本只是附加.
是否可以将Bourne shell脚本的所有输出重定向到某个地方,但是脚本本身内部有shell命令?
重定向单个命令的输出很简单,但我想要更像这样的东西:
#!/bin/sh
if [ ! -t 0 ]; then
# redirect all of my output to a file here
fi
# rest of script...
Run Code Online (Sandbox Code Playgroud)
含义:如果脚本以非交互方式运行(例如,cron),则将所有内容的输出保存到文件中.如果从shell以交互方式运行,请让输出像往常一样转到stdout.
我想为通常由FreeBSD定期实用程序运行的脚本执行此操作.它是日常运行的一部分,我通常不会每天都看到电子邮件,所以我没有发送它.但是,如果这个特定脚本中的某些内容失败,那对我来说很重要,我希望能够捕获并通过电子邮件发送这部分日常工作的输出.
更新:Joshua的回答是正确的,但我也想在整个脚本周围保存和恢复stdout和stderr,这样做:
# save stdout and stderr to file descriptors 3 and 4, then redirect them to "foo"
exec 3>&1 4>&2 >foo 2>&1
# ...
# restore stdout and stderr
exec 1>&3 2>&4
Run Code Online (Sandbox Code Playgroud) 是否有一种快速的,单行的方式将Unix时间戳转换为Unix命令行中的日期?
date可能会工作,除了指定每个元素(月,日,年,小时等)相当尴尬,我无法弄清楚如何让它正常工作.似乎可能有一种更简单的方法 - 我错过了什么吗?
我试图将命令行程序的所有输出重定向到文件.我正在使用Bash.一些输出被定向到文件,但是一些仍然出现在终端中并且不存储到文件中.
这里描述了类似的症状:
但是我尝试了所提出的解决方案(捕获stderr)但没有成功:
<cmd> <args> > stdout.txt 2> stderr.txt
Run Code Online (Sandbox Code Playgroud)
文件stderr.txt已创建但为空.
可能的线索是命令行程序是与同一台机器上的服务器通信的客户端.可能有些输出来自服务器.
有没有办法捕获终端的所有输出,无论其来源如何?
编辑:
我已经确认缺少的输出是由服务器生成的.在单独的终端中运行命令会在两个终端中产生一些输出,我可以将命令终端的所有输出传输到文件.这引发了有关如何捕获服务器输出的问题,但这是一个不同的问题.
我需要创建一个文本文件(除非它已经存在)并使用bash向文件写一个新行.
我确信这很简单,但有人可以向我解释一下吗?