私が達成したいのは、Yakuake / Konsoleを使用するたびにターミナルセッションを自動的に記録してアーカイブすることです。
クラスの始めに次のようにすると、実装が簡単です。
script -f /home/$USER/bin/shell_logs/$(date +"%d-%b-%y_%H-%M-%S")_shell.log
しかし、Yakuakeを起動するか新しいタブを開くたびに、上記の内容が自動的に実行されることを望みます。
.bashrcを使用すると、「スクリプト」が新しいセッションを開き、.bashrcを読み込み、別の「スクリプト」を起動するなど、無限ループが生成されるため、機能しません。
したがって、おそらく新しいタブが開いたときに「スクリプト」が一度実行されるように、Yakuake / Konsoleをスクリプトとして作成する必要があります。問題はどうですか?
ベストアンサー1
script
このユーティリティを使用してターミナルセッション(SSHセッション(!)を含む)を自動的に記録する場合は、次の方法があります。
.bashrc
ホームディレクトリの末尾に次の行を追加するか、すべての/etc/bash.bashrc
ユーザーのセッションのみを記録するには、次の行を追加します。シェルの親プロセスが存在しないかテストし、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
結果ファイルと同じ名前を付けます。
追加のカスタマイズ:
- セッションごとに新しいファイルを作成する代わりに、1つの大きなファイルにセッションを追加できます。
script -a /path/to/single_log_file
script -f
script -F
(Linux) または (BSD と macOS) 以降のパスを変更して、ファイルが書き込まれる場所を調整できます.
script
もちろん、この答えはあなたがすでにインストールされていると仮定しています。 Debianベースのディストリビューションはscript
パッケージの一部ですbsdutils
。