Bash

如何使用腳本實用程序自動記錄所有終端會話

  • February 26, 2021

我想要實現的是能夠在我使用 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 -fscript -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軟體包的一部分。

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