我是 unix 脚本编写的新手,我想做以下事情,但我不知道如何继续。
我想将终端上给出的某些命令集的输入和输出记录到跟踪文件中。我应该能够打开和关闭它。
例如
switch trace on
user:echo Hello World
user:Hello World
switch trace off
然后是跟踪日志文件,例如trace.log,它的内容应该是
echo Hello World
Hello World
我能想到做的一件事是使用set -x
,将其输出重定向到某个文件,但找不到一种方法来做到这一点。我执行了 man set
或 man -x
但没有找到任何条目。也许我太天真了,但是一些指导会非常有帮助。
我正在使用 bash shell。
最佳答案
参见脚本
(1),“制作终端 session 的 typescript ”。要在文件 xyz 中开始新的转录:script xyz
。要添加到文件 xyz 中的现有记录:script -a xyz
。
将会有一些开销行,例如 Script started on ...
和 Script did on ...
,您可以使用 awk 或 sed 过滤掉它们打印出。 -t 开关允许实时播放。
我认为最近可能有一个关于如何在 less
中显示成绩单的问题,虽然我找不到它,this question和 this one解决了查看包含控制字符的文件时遇到的一些相同问题。 (捕获的转录本通常包含 ANSI 控制序列,并且通常包含回车符和换行符。)
更新 1 Perl 程序 script-declutter可用于从脚本日志中删除特殊字符。
该程序大约有 45 行代码,位于链接中间附近。将这些代码行保存在 PATH 上子目录中名为 script-declutter
的文件中(例如,如果 $HOME/bin
位于您的搜索路径上,则为 $HOME/bin
,否则(例如,/usr/local/bin
)并使文件可执行。之后,像这样的命令
script-declutter typescript > out
将从文件typescript
中删除大多数特殊字符,
同时将结果定向到文件out
。
关于bash - UNIX 中的按键记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7546045/