到目前为止,我见过的所有命令都类似于command > file
或command >> file
,它们将结果输出到指定文件。例如,当我输入 时openssl version > lab4.txt
,我在文本文件中看到的只是OpenSSL 1.0.1e-fips 11 Feb 2013
。
如果我想像这样依次输出我输入的命令和返回的结果,该怎么办?
linux2[20]% openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
谢谢你的帮助
答案1
重定向运算符command > file
将重定向命令的 STDOUT 或命令的 STDERR(如果使用方式类似),或两者(如果在 bash 或任何 shell 中以可移植方式command 2> file
使用)。我不知道有任何直接使用重定向的方法可以实现您的需要。&>
command > file 2>&1
虽然可以使用该script
程序。它基本上会保存该会话中在终端上打印的所有内容script
。
从man script
:
script makes a typescript of everything printed on your terminal.
It is useful for students who need a hardcopy record of an
interactive session as proof of an assignment, as the typescript file
can be printed out later with lpr(1).
您只需在终端中script
输入即可启动会话,所有后续命令及其输出都将保存在当前目录中的文件中。您也可以通过以下方式将结果保存到其他文件中:script
typescript
script
script output.txt
要退出会话screen
(停止保存内容),只需输入exit
。
以下是一个例子:
$ script output.txt
Script started, file is output.txt
$ ls
output.txt testfile.txt foo.txt
$ exit
exit
Script done, file is output.txt
现在如果我读取该文件:
$ cat output.txt
Script started on Mon 20 Apr 2015 08:00:14 AM BDT
$ ls
output.txt testfile.txt foo.txt
$ exit
exit
Script done on Mon 20 Apr 2015 08:00:21 AM BDT
script
还有很多选项,例如安静地运行-q
(--quiet
)而不显示/保存程序消息,它还可以运行特定命令-c
(--command
)而不是会话,它还有许多其他选项。检查man script
以获得更多想法。
答案2
您需要创建以下内容的脚本:
echo 'command -params/r' > file.lst
command -params >> file.lst