別の方法

別の方法

私が達成したいのは、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 -fscript -F(Linux) または (BSD と macOS) 以降のパスを変更して、ファイルが書き込まれる場所を調整できます.

scriptもちろん、この答えはあなたがすでにインストールされていると仮定しています。 Debianベースのディストリビューションはscriptパッケージの一部ですbsdutils

おすすめ記事