bash - UNIX 中的按键记录

标签 bash unix

我是 unix 脚本编写的新手,我想做以下事情,但我不知道如何继续。

我想将终端上给出的某些命令集的输入和输出记录到跟踪文件中。我应该能够打开和关闭它。

例如

switch trace on

user:echo Hello World

user:Hello World

switch trace off

然后是跟踪日志文件,例如trace.log,它的内容应该是

echo Hello World

Hello World

我能想到做的一件事是使用set -x,将其输出重定向到某个文件,但找不到一种方法来做到这一点。我执行了 man setman -x 但没有找到任何条目。也许我太天真了,但是一些指导会非常有帮助。 我正在使用 bash shell。

最佳答案

参见脚本(1),“制作终端 session 的 typescript ”。要在文件 xyz 中开始新的转录:script xyz。要添加到文件 xyz 中的现有记录:script -a xyz

将会有一些开销行,例如 Script started on ...Script did on ... ,您可以使用 awk 或 sed 过滤掉它们打印出。 -t 开关允许实时播放。

我认为最近可能有一个关于如何在 less 中显示成绩单的问题,虽然我找不到它,this questionthis 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/

相关文章:

linux - 在 systemd 服务中使用用户的 .bashrc

linux - 将 stderr、stdout 和 stdin 重定向到管道会阻止进程运行

linux - 我可以使用 join 命令连接两个在不同列上具有相似性的文件吗?

c - 是否可以打印日志文件的特定部分?

macos - 如何对已经运行的进程执行 "nice"操作?

linux - 如何grep同一文件中多次出现的一个字符串

android - 将 grep 与 python subprocess.check_output 和 adb logcat 结合使用

linux - 在 find -exec 中使用参数执行命令的正确语法

c - 使用 unistd.h 读取和写入结构读/写

bash - 过滤 `tree` 命令的输出