screenrcで動的に生成されたログファイルはHardstatusに表示されます。

screenrcで動的に生成されたログファイルはHardstatusに表示されます。

GNU画面ログファイルのファイル名として、起動時に日付と時刻の組み合わせを使用したいと思います。 screenrcで次のように入力すると

logfile '~/log/screen_%H_%m%d%Y_%0c-%t.%n'

次のように動的に生成されたファイルを取得します。

screen_nanna13_06062012_08:03-bash.0

これで、画面のハードステータスバーにそのファイル名が表示されます。利用できません

hardstatus string '~/log/screen_%H_%m%d%Y_%0c-%t.%n'

時間が変わるたびにプレースホルダが更新されるからです。

私が考えることができるソリューションには、画面が起動する前に実行されるbashコードが含まれていますが、個々の画面ウィンドウは独自の動的ログファイルを取得する必要があるため、これはお勧めできません。

画面に変数置換メカニズムがありますか?

答え1

screenコマンドを使用して解決策を見つけましたbacktick

backtick 1 0 0 date +%d%b%Y_%k:%M
logfile '~/log/%H_%1`-%t.%n'
hardstatus string '~/log/%H_%1`-%t.%n'

UNIX日付コマンドを使用して、現在の日付/時刻を%1変数にロードします。唯一の問題は、セッション中に後で新しいウィンドウが作成されると、ログファイル名の日付が変更されないことです(しかし、私はこれがそのログファイルをよりよく識別できるようにするので、機能でもあります)。

答え2

このコマンドは正確に達成したいコマンドであり、新しいウィンドウが作成されるとログファイル名の日付も変更されます。

backtick 1 1 0 /bin/date +%Y-%m-%d_%k.%M.%S # generate %1`
logfile '~/log/%H_%1`-%t.%n'
hardstatus string '~/log/screenlog_%H_%1`_win.%n.txt'

出典:画面のマニュアルページ

PS。backtick 1 0 0バージョンではまったく機能しません。 4.08.00 試したとき。それはそれを完全に無視します。

関連情報