Answers:
使用script
命令。它将复制屏幕上显示的所有内容
script -c "sudo apt-get install things" script-file.script
script
将命令输出发送到文件,但不在屏幕上显示。
script -c "history" ~/hist.txt
并看到指示Script started
和的输出Script done
,但没有在屏幕上看到实际命令的输出。
history
是一个shell buildint,而不是一个外部命令。发生的情况是:1)脚本启动,2)脚本搜索history命令,未找到它,因此猜测它应该通过外壳程序运行。3)脚本history
通过外壳运行命令4)新的外壳启动并执行历史内部命令。由于这是一个新的非交互式外壳,因此历史无话可说。
script
也可以交互式运行。只需script
在命令提示符下键入。您将获得一个新的shell,并且您键入的任何命令都将保存其输出。键入exit
以结束外壳程序并保存文件。默认情况下,将调用输出,并且该输出typescript
将包含屏幕上显示的所有内容(无论是键入内容还是命令的输出)。该history
命令在新的shell中也应该仍然可用。
您可以使用tee
命令来完成此操作。
sudo apt-get install someapp 2>&1 | tee ~/someappInstall.txt
在这里查看更多信息,或执行man tee
注意:正如其他人提到的那样,2>&1
有必要将STDERR重定向到STDOUT以捕获任何错误。请参阅此StackOverflow问题以获取有关2>&1
实际功能的良好解释。
script
因为不必引用该命令而更加实用。因此,bash完成之类的优势更容易实现。
-c "something ..."
:if,然后将您放到一个shell中,并在退出该shell时完成。允许多个命令,等等。此外,它还保留更多的“格式化”信息,允许重播更多内容(例如:清除屏幕等)(但这也会使输出混乱... ymmv)
|&
代替2>&1 |
bash
tee
将按要求完成工作。
要将输出捕获到文件中,请使用:
sudo apt-get install your_software | tee log_file.txt
这将仅捕获输出,而不捕获任何错误消息。如果您还想记录错误消息,请将命令修改为:
sudo apt-get install your_software 2>&1 | tee log_file.txt
bash
支持|&
操作员,因此sudo apt-get install your_software |& tee log_file.txt
会将stdout和stderr都管道传输到tee
。(对JF塞巴斯蒂安(JF Sebastian)在其他地方提出过建议,表示
apt-get(通常是APT)的优点之一是,它们将几乎所有内容存储在日志文件中,甚至包括您在槽中运行的任何命令的终端输出/var/log/apt
。例如,这是my中的最后一个条目/var/log/apt/term.log
:
Log started: 2014-06-20 16:46:08
(Reading database ... 252472 files and directories currently installed.)
Removing xdotool (1:3.20130111.1-3.1) ...
Processing triggers for man-db (2.6.7.1-1) ...
Log ended: 2014-06-20 16:46:33
现在,与实际输出进行比较:
➜ ~ sudo apt-get remove xdotool
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
libxdo3
Use 'apt-get autoremove' to remove it.
The following packages will be REMOVED:
xdotool
0 upgraded, 0 newly installed, 1 to remove and 2 not upgraded.
After this operation, 135 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 252472 files and directories currently installed.)
Removing xdotool (1:3.20130111.1-3.1) ...
Processing triggers for man-db (2.6.7.1-1) ...
它为我节省了在大多数情况下不相关的几行,并且自动执行。因此,您不需要任何额外的命令即可执行所需的操作,而apt-get会为您完成。
apt-get
对的吗?