在gnu / Linux中,我想将所有命令输出记录到一个特定文件中。 在终端说,我在打字
echo "Hi this is a dude"
它应该以前面指定的文件名打印,而不使用每个命令中的重定向。
答案 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.
您可以使用移植输出运行任何程序,其所有输出都将转到文件,例如:
$ 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是一个有用的命令,因为它允许您存储进入它的所有内容以及在屏幕上显示它。特别适用于记录脚本的输出。