web-dev-qa-db-ja.com

.screenrcに依存せずに画面出力のログ名を指定する

Bashスクリプトでは、「screen -L」を使用して、実行されたコマンドをカラーで記録します。例えば:

screen -L tree

次に、less -Rを使用してログファイルを読み取ります。

このスクリプトが実行されると、他の画面が実行されている可能性があるため、どのscreenlog。*に出力が含まれているかはわかりません。ユーザーに.screenrcのカスタマイズを要求することはできません。

コマンドラインでログ名を指定する方法、または特定の.screenrcコマンドを読み取る方法はありますか?

7
Philippe Blayo

私はこれについていくつかの考えを持っています。まず、-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
12
Phil Hollenback

使用する:

tree -C > tree.log

-Cオプションは、出力がttyでない場合でもカラーを強制します。

同様に:

ls -l --color=always > ls.log
grep --color=always foo bar > grep.log
ack --color foo > ack.log

多くの場合、色を出力するユーティリティには、出力がパイプに送信されるかリダイレクトされるときに、色を強制する方法があります。

または、オンラインで行う方法もあります。

画面からコマンドモードに入る CtrlA、 :、およびlogfileコマンドを使用して、引数として必要なファイルの名前を指定します。

logfile whatevernameyoulike.log

出典:Screen manページ

1
Juan Enciso