Bash
如何使用腳本實用程序自動記錄所有終端會話
我想要實現的是能夠在我使用 Yakuake/Konsole 時自動記錄我的終端會話到文件。
如果在我的會話開始時我這樣做很容易實現:
script -f /home/$USER/bin/shell_logs/$(date +"%d-%b-%y_%H-%M-%S")_shell.log
但我想在啟動 Yakuake 或打開新標籤時自動執行上述內容。
使用 .bashrc 不起作用,因為它會創建無限循環,因為“腳本”會打開一個新會話,而該會話又會讀取 .bashrc 並啟動另一個“腳本”等等。
所以大概我需要以某種方式編寫 Yakuake/Konsole 腳本,以便在打開新選項卡時執行“腳本”。問題是如何?
如果有人想自動記錄他們的終端會話——包括 SSH 會話(!)——使用該
script
實用程序,這裡是如何。在您的主目錄的末尾添加以下行
.bashrc
,或者/etc/bash.bashrc
如果您只想記錄所有使用者的會話。我們測試 shell 的父程序不存在script
,然後執行script
.對於 Linux:
test "$(ps -ocommand= -p $PPID | awk '{print $1}')" == 'script' || (script -f $HOME/$(date +"%d-%b-%y_%H-%M-%S")_shell.log)
對於 BSD 和 macOS,更改
script -f
為script -F
:test "$(ps -ocommand= -p $PPID | awk '{print $1}')" == 'script' || (script -F $HOME/$(date +"%d-%b-%y_%H-%M-%S")_shell.log)
就這樣!
現在,當您打開一個新終端時,您會看到:
Script started, file is /home/username/file_name.log
script
會將您的會話寫入您的主目錄中的一個文件,從而將它們命名30-Nov-11_00-11-12_shell.log
為結果。更多定制:
- 您可以將會話附加到一個大文件,而不是為每個會話創建一個新文件
script -a /path/to/single_log_file
script -f
您可以通過更改(Linux) 或script -F
(BSD 和 macOS)之後的路徑來調整文件的寫入位置當然,此答案假定您已經
script
安裝。在基於 Debian 的發行版上,script
它是bsdutils
軟體包的一部分。