2

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

echo "Hi this is a dude"

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

4

5 回答 5

6
$ 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 提示符具有独特的子字符串模式)

于 2013-06-13T18:52:45.870 回答
3

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

exec > output.txt

在该命令之后,shell 本身会将其标准输出写入一个名为 output.txt 的文件,并且它生成的任何命令都将执行同样的操作,除非另有重定向。您始终可以使用“恢复”输出到终端

exec > /dev/tty

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

于 2013-06-13T19:12:57.747 回答
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 是一个有用的命令,因为它允许您存储进入其中的所有内容并将其显示在屏幕上。对于记录脚本的输出特别有用。

于 2013-06-13T19:37:39.210 回答
0
{ command1 ; command2 ; command3 ; } > outfile.txt
于 2013-06-13T19:02:28.673 回答
0

输出重定向可以在 bash 中实现>有关 bash 重定向的更多信息,请参见此链接。

您可以运行任何带有移植输出的程序,其所有输出都将保存到一个文件中,例如:

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

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

$ bash > outfile

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

$ bash &> outfile

将所有 stdout 和 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
$
于 2013-06-13T19:01:34.030 回答