如何在bash脚本中将所有命令输出记录到一个文件中

时间:2013-06-13 18:50:02

标签: bash

在gnu / Linux中,我想将所有命令输出记录到一个特定文件中。 在终端说,我在打字

echo "Hi this is a dude"

它应该以前面指定的文件名打印,而不使用每个命令中的重定向。

5 个答案:

答案 0 :(得分:4)

$ script x1
Script started, file is x1
$ echo "Hi this is a dude"
Hi this is a dude
$ echo "done"
done
$ exit
exit
Script done, file is x1

然后,文件x1的内容为:

Script started on Thu Jun 13 14:51:29 2013
$ echo "Hi this is a dude"
Hi this is a dude
$ echo "done"
done
$ exit
exit

Script done on Thu Jun 13 14:51:52 2013

您可以使用基本的shell脚本(grep -v轻松编辑自己的命令和开始/结束行,尤其是当您的Unix提示符具有独特的子字符串模式时)

答案 1 :(得分:3)

从shell启动的命令继承文件描述符以用于shell的标准输出。在典型的交互式shell中,标准输出是终端。您可以使用exec命令更改它:

exec > output.txt

在该命令之后,shell本身会将其标准输出写入名为output.txt的文件,并且它生成的任何命令都会这样做,除非重定向。您始终可以使用

将输出“恢复”到终端
exec > /dev/tty

请注意,您在提示符下键入的shell提示符和文本将继续显示在屏幕上(因为shell会将这两者写入标准错误,而不是标准输出)。

答案 2 :(得分:0)

可以使用>See this link for more info on bash redirection.

在bash中实现输出重定向

您可以使用移植输出运行任何程序,其所有输出都将转到文件,例如:

$ ls > out
$ cat out
Desktop
Documents
Downloads
eclipse
Firefox_wallpaper.png
...

所以,如果你想用一个移植输出打开一个新的shell会话,就这样做!:

$ bash > outfile

将启动一个新的bash会话,将所有stdout移植到该文件。

$ bash &> outfile

会将所有stdout AND stderr移植到该文件中(意味着您将不再看到终端中显示的提示)

例如:

$ bash > outfile
$ echo "hello"
$ echo "this is an outfile"
$ cd asdsd
bash: cd: asdsd: No such file or directory
$ exit
exit
$ cat outfile
hello
this is an outfile
$

$ bash &> outfile
echo "hi"
echo "this saves everythingggg"
cd asdfasdfasdf
exit
$ cat outfile
hi
this saves everythingggg
bash: line 3: cd: asdfasdfasdf: No such file or directory
$

答案 3 :(得分:0)

{ command1 ; command2 ; command3 ; } > outfile.txt

答案 4 :(得分:0)

如果要查看输出并将其写入文件(比如以后的分析),则可以使用tee命令。

$ echo "hi this is a dude" | tee hello
hi this is a dude
$ ls
hello
$ cat hello
hi this is a dude

tee是一个有用的命令,因为它允许您存储进入它的所有内容以及在屏幕上显示它。特别适用于记录脚本的输出。