Set*_*eth 1314
是的,这是可能的,只需将输出(AKA stdout
)重定向到一个文件:
SomeCommand > SomeFile.txt
Run Code Online (Sandbox Code Playgroud)
或者,如果您想附加数据:
SomeCommand >> SomeFile.txt
Run Code Online (Sandbox Code Playgroud)
如果你也想stderr
使用这个:
SomeCommand &> SomeFile.txt
Run Code Online (Sandbox Code Playgroud)
或者这个要附加:
SomeCommand &>> SomeFile.txt
Run Code Online (Sandbox Code Playgroud)
如果您想在控制台和文件中同时显示stderr
和输出,请使用以下命令:
SomeCommand 2>&1 | tee SomeFile.txt
Run Code Online (Sandbox Code Playgroud)
(如果您只想要输出,请删除2
以上内容)
Byt*_*der 1308
要将命令的输出写入文件,基本上有 10 种常用的方法。
请注意,
n.e.
语法列中的 表示“不存在”。
有一种方法,但是太复杂了,无法放入列中。您可以在“列表”部分找到有关它的有用链接。
|| visible in terminal || visible in file || existing
Syntax || StdOut | StdErr || StdOut | StdErr || file
==========++==========+==========++==========+==========++===========
> || no | yes || yes | no || overwrite
>> || no | yes || yes | no || append
|| | || | ||
2> || yes | no || no | yes || overwrite
2>> || yes | no || no | yes || append
|| | || | ||
&> || no | no || yes | yes || overwrite
&>> || no | no || yes | yes || append
|| | || | ||
| tee || yes | yes || yes | no || overwrite
| tee -a || yes | yes || yes | no || append
|| | || | ||
n.e. (*) || yes | yes || no | yes || overwrite
n.e. (*) || yes | yes || no | yes || append
|| | || | ||
|& tee || yes | yes || yes | yes || overwrite
|& tee -a || yes | yes || yes | yes || append
Run Code Online (Sandbox Code Playgroud)
command > output.txt
标准输出流将仅重定向到文件,在终端中将不可见。如果文件已经存在,它会被覆盖。
command >> output.txt
标准输出流将仅重定向到文件,在终端中将不可见。如果文件已经存在,新数据将附加到文件末尾。
command 2> output.txt
标准错误流将仅重定向到文件,在终端中将不可见。如果文件已经存在,它会被覆盖。
command 2>> output.txt
标准错误流将仅重定向到文件,在终端中将不可见。如果文件已经存在,新数据将附加到文件末尾。
command &> output.txt
标准输出和标准错误流都将仅重定向到文件,终端中将看不到任何内容。如果文件已经存在,它会被覆盖。
command &>> output.txt
标准输出和标准错误流都将仅重定向到文件,终端中将看不到任何内容。如果文件已经存在,新数据将附加到文件末尾。
command | tee output.txt
标准输出流将被复制到文件中,它仍将在终端中可见。如果文件已经存在,它会被覆盖。
command | tee -a output.txt
标准输出流将被复制到文件中,它仍将在终端中可见。如果文件已经存在,新数据将附加到文件末尾。
(*)
Bash 没有速记语法,只允许将 StdErr 传递给第二个命令,这里需要将其与tee
再次组合以完成表。如果您真的需要这样的东西,请查看“如何通过管道 stderr,而不是 stdout?” 在 Stack Overflow 上了解如何做到这一点,例如通过交换流或使用进程替换。
command |& tee output.txt
标准输出和标准错误流都将被复制到文件中,同时在终端中仍然可见。如果文件已经存在,它会被覆盖。
command |& tee -a output.txt
标准输出和标准错误流都将被复制到文件中,同时在终端中仍然可见。如果文件已经存在,新数据将附加到文件末尾。
Aar*_*ron 124
您还可以使用tee
将输出发送到文件:
command | tee ~/outputfile.txt
Run Code Online (Sandbox Code Playgroud)
稍作修改也将捕获 stderr:
command 2>&1 | tee ~/outputfile.txt
Run Code Online (Sandbox Code Playgroud)
或稍短且不那么复杂:
command |& tee ~/outputfile.txt
Run Code Online (Sandbox Code Playgroud)
tee
如果您希望能够在实时查看命令输出的同时捕获命令输出,则非常有用。
cha*_*aos 20
您可以将命令输出重定向到文件:
your_command >/path/to/file
Run Code Online (Sandbox Code Playgroud)
要将命令输出附加到文件而不是覆盖它,请使用:
your_command >>/path/to/file
Run Code Online (Sandbox Code Playgroud)
小智 19
需要考虑的增强功能 -
各种脚本会将颜色代码注入到输出中,您可能不希望这些代码弄乱您的日志文件。
要解决此问题,您可以使用程序sed 去除这些代码。例子:
command 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt
Run Code Online (Sandbox Code Playgroud)
tri*_*eee 10
对于cron
工作等,您希望避免 Bash 扩展。等效的 POSIXsh
重定向运算符是
Bash POSIX
------------ --------------
foo &> bar foo >bar 2>&1
foo &>> bar foo >>bar 2>&1
foo |& bar foo 2>&1 | bar
Run Code Online (Sandbox Code Playgroud)
您会注意到 POSIX 工具在某种意义上更简单、更直接。该&>
语法是从借来csh
应该已经说服你,这是一个坏主意。
Fra*_*urt 10
some_command | tee command.log
并且some_command > command.log
存在他们没有将命令输出command.log
实时保存到文件的问题。
为避免该问题并实时保存命令输出,您可以附加包unbuffer
随附的expect
。
例子:
sudo apt-get install expect
unbuffer some_command | tee command.log
unbuffer some_command > command.log
Run Code Online (Sandbox Code Playgroud)
假设log.py
包含:
import time
print('testing')
time.sleep(100) # sleeping for 100 seconds
Run Code Online (Sandbox Code Playgroud)
你可以运行unbuffer python log.py | tee command.log
或unbuffer python log.py > command.log
更多信息:如何将命令输出实时保存到文件?
Win*_*nix 10
这里有两个不同的问题。第一个在标题中:
如何将终端输出保存到文件?
第二个问题是在正文中:
如何将命令的输出保存到文件?
此处发布的所有答案都解决了第二个问题,但没有解决第一个问题,该问题在Unix 和 Linux 中有很好的答案:
这个答案使用了一个鲜为人知的命令script
,该命令将所有 shell 的输出保存到一个文本文件中,直到您键入exit
. 命令输出仍会出现在屏幕上,但也会出现在文本文件中。
这个过程很简单。用:
$ script ~/outputfile.txt
Script started, file is /home/rick/outputfile.txt
$ command1
$ command2
$ command3
$ exit
exit
Script done, file is /home/rick/outputfile.txt
Run Code Online (Sandbox Code Playgroud)
然后查看您记录的命令 1、2 和 3 的输出:
cat ~/outputfile.txt
Run Code Online (Sandbox Code Playgroud)
这类似于之前的回答:
command |& tee ~/outputfile.txt
Run Code Online (Sandbox Code Playgroud)
|& tee ~/outputfile.txt
在每个commnd
.script
命令~/.bashrc
在启动时增加了重新加载的好处(或缺点)。script
命令显示命令提示符 ( $PS1
),后跟您输入的命令。script
命令以全彩色记录所有详细信息。