Bashスクリプトでは、「screen -L」を使用して、実行されたコマンドをカラーで記録します。例えば:
screen -L tree
次に、less -R
を使用してログファイルを読み取ります。
このスクリプトが実行されると、他の画面が実行されている可能性があるため、どのscreenlog。*に出力が含まれているかはわかりません。ユーザーに.screenrc
のカスタマイズを要求することはできません。
コマンドラインでログ名を指定する方法、または特定の.screenrc
コマンドを読み取る方法はありますか?
私はこれについていくつかの考えを持っています。まず、-c
コマンドラインスイッチを介してscreenを呼び出すときに、スタートアップscreenrcを制御できることに注意してください。次に、.screenrcで環境変数を使用できます。これをすべてまとめると、次のシェルスクリプトは、希望どおりのことを実行します。
#!/bin/bash
cat << EOF >/tmp/screenrc.$$
logfile /tmp/screenlog.$$
EOF
screen -c /tmp/screenrc.$$ -L
rm /tmp/screenrc.$$
echo "logfile is /tmp/screenlog.$$"
このスクリプトはユーザーscreenrcをオーバーライドし、出力を特定のファイルに配置します。この場合、$$
を使用して、スクリプトプロセス名を追加することによりファイル名を生成しています。安全な一時ファイルを作成するために通常は代わりにmktemp
を使用する必要がありますが、私は今のところ怠惰です。
また、これはユーザー.screenrc
を完全に置き換えます。そのファイルから設定を引き続き読み取りたい場合は、生成された構成ファイルを次のように変更する必要があります。
logfile /tmp/screenlog.$$
source $HOME/.screenrc
使用する:
tree -C > tree.log
-C
オプションは、出力がttyでない場合でもカラーを強制します。
同様に:
ls -l --color=always > ls.log
grep --color=always foo bar > grep.log
ack --color foo > ack.log
多くの場合、色を出力するユーティリティには、出力がパイプに送信されるかリダイレクトされるときに、色を強制する方法があります。
または、オンラインで行う方法もあります。
画面からコマンドモードに入る Ctrl + A、 :、およびlogfile
コマンドを使用して、引数として必要なファイルの名前を指定します。
logfile whatevernameyoulike.log
出典:Screen manページ