Logs

我可以為終端會話分別記錄使用者輸入和程序輸出嗎?

  • September 9, 2018

我希望我能做script這樣的工作:

❯ script --user=call.log --prog=response.log
   Script started

❯ echo foo
   foo

❯ exit
   Script done

❯ cat call.log
   echo foo

❯ cat response.log
   foo

既然沒有,我正在尋找替代品。

查看顯示的實際輸出,script如下所示:

^M^[[35m❯ ^[[Ke^Hecho foo#[[?1l^[>^?2004l^M^M
^[]0;tmp: echo foo^Gfoo^M

我考慮過編寫一個解析器來提取我想要的東西——但這似乎很脆弱,特別是因為它似乎取決於使用者的 shell 配置。

有沒有更好的方法來分別記錄會話的輸入和輸出?

在不了解各種應用程序的內部情況的情況下,您無法分辨終端驅動程序(代表應用程序)回顯了哪些字元,以及給定應用程序輸出了哪些字元。

我使用**script擷取命令行**應用程序(如您的範例)的輸出,然後使用腳本過濾掉轉義序列(例如,請參閱我可以使用 unix utils 以程式方式將 ANSI 控制程式碼“燒入”到文件中嗎?)。

這對於編輯器等全屏應用程序來說效果不佳(因為它無法清楚地顯示當游標在螢幕上移動、更新文本時會發生什麼)。為此,(通常)以慢動作回放會話(例如,slowcat)就足夠了。

引用自:https://unix.stackexchange.com/questions/467897