如何在Linux中将输出写入文件

时间:2020-01-09 10:39:58  来源:igfitidea点击:

如何将输出写入Linux bash shell中的文件中?
您能否解释bash和POSIX shell的I/O重定向,以便在Unix或Linux下将数据写入文件?
在shell提示符下执行命令时,它会在屏幕或终端上显示输出。
但是,bash允许您重定向输出并将输出写入Linux或类似Unix的系统中的文件。
这对于处理很有用,或者将终端输出保存到文件中以用于其他目的。

如何将终端输出保存到文件中?

命令可以从文件接收输入,并将输出发送到文件。

将输出写入文件

语法是

command > filename

例如,将ls命令的输出发送到名为foo.txt的文件

$ ls > foo.txt

使用cat命令查看foo.txt:

$ cat foo.txt

请注意,当执行ls> foo.txt时,shell会将ls命令的输出重定向到名为foo.txt的文件,从而替换文件的现有内容。
换句话说,文件的内容将被覆盖。

将输出或数据追加到文件

语法是

command >> filename

例如,以下内容将追加数据:

echo "--------------" >> /tmp/data.txt
echo "Domain information" >> /tmp/data.txt
host www.theitroad.local >> /tmp/data.txt
echo "--------------" >> /tmp/data.txt

验证一下:

cat /tmp/data.txt

如何使用tee命令将命令输出保存到bash中的文件

tee命令从标准输入读取并写入标准输出和文件。
将数据写入文件的语法如下:

command | tee file.txt

要追加数据吗?
尝试

command | tee -a output.txt

例子

在屏幕上显示date命令的输出,并保存到名为/tmp/output.txt的文件中。
如果output.txt已经存在,它将被覆盖:

$ date | tee /tmp/output.txt
$ cat /tmp/output.txt

与上面相同,但追加到给定文件,请勿覆盖文件:

$ pwd | tee -a /tmp/test.txt
$ echo "Today is $(date)" | tee -a /tmp/test.txt
$ hostnamectl | tee -a /tmp/test.txt
$ cat /tmp/test.txt

上面的命令会将输出追加到文件的末尾,就像前面解释的shell>>运算符一样。

Bash和POSIX Shell的I/O重定向摘要

Shell运算符描述覆盖现有文件?
命令> output.txt将终端输出(标准输出)保存到名为output.txt的文件中
命令>> output.txt将终端输出(标准输出)追加到名为output.txt的文件中
command <output.txt从output.txt文件获取标准输入N/A
命令0 <output.txt从output.txt文件中获取标准输入N/A
命令1> output.txt将标准输出放入output.txt文件
命令1 >> output.txt将标准输出追加到output.txt
命令2> output.txt将标准错误放入output.txt
命令2 >> output.txt将标准错误追加到output.txt文件
command&> output.txt同时输入标准错误并输出到output.txt
命令> output.txt 2>&1{POSIX}将标准错误和输出都放到名为output.txt的文件中
command&>> output.txt将标准错误和输出都追加到名为output.txt的文件中
command >> output.txt 2>&1{POSIX}既将标准错误又输出到名为output.txt的文件中
命令| tee output.txt在屏幕上显示输出的同时将标准输出放入output.txt
命令| tee -a output.txt在屏幕上显示输出时将标准输出追加到output.txt
command |&tee output.txt在终端上显示输出时,将标准输出和错误都输入到output.txt中
命令2>&1 | tee output.txt{POSIX}将标准输出和错误都输入到名为output.txt的文件中,同时在终端上显示输出
命令|&tee -a output.txt在终端上显示输出时,将标准输出和错误都追加到名为output.txt的文件
命令2>&1 | tee -a output.txt{POSIX}将标准输出和错误追加到名为output.txt的文件,同时在终端上显示输出

总结

您学习了如何使用bash或POSIX shell将输出写入Linux或类似Unix的系统中的文件。

  • /dev/stdin(标准输入)-文件描述符0被复制。
  • /dev/stdout(标准输出)-复制了文件描述符1。
  • /dev/stderr(标准错误)-文件描述符2被复制。