web-dev-qa-db-ja.com

「スクリーン」(プログラム)出力をファイルに保存します

screenの出力全体をファイルに保存して、後ですべてのコンテンツを確認する必要があります。
その理由は、シリアルポートを介してフラッシュメモリをダンプし、画面を使用してインターフェイスとインターフェイスするためです。
メモリ構造を確認するためにファイルに保存したいと思います。

私はもう試した :

$: screen /dev/ttyUSB0 115200 >> foo.txt
$: screen /dev/ttyUSB0 115200 | tee foo.txt

また、画面からbufferfileを使用しようとしましたが、使用方法がわかりません。

簡単な方法はありますか?

105
Edoardoo

ロギング用のコマンドラインオプションがあります。出力はscreenlog.nファイルに保存されます。nは画面の番号です。画面のmanページから:

'-L'ウィンドウの自動出力ログをオンにするよう画面に指示します。

101
Fergie

Control-a + Hを使用して、ロギングをscreenlog.nファイルに保存することもできます。もう1つControl-a + Hをオフにします。

C-a H:ファイル "screenlog.n"への現在のウィンドウのロギングを開始/終了します。

94
NeliJ

選択した回答は、複数のセッションではうまく機能せず、カスタムログファイル名を指定できません。

複数の画面セッションの場合、これは私の式です:

1)プロセスごとに構成ファイルを作成します。

logfile test.log
logfile flush 1
log on
logtstamp after 1
logtstamp string "[ %t: %Y-%m-%d %c:%s ]\012"
logtstamp on

「オンザフライ」で実行したい場合は、logfileを自動的に変更できます。 \012は「改行」を意味します。\nを使用すると、ログファイルに source と出力されます。

2)「-c」および「-L」フラグを使用してコマンドを開始します。

screen -c ./test.conf -dmSL 'Test' ./test.pl

それでおしまい。最初のフラッシュの後に「test.log」が表示されます。

...
6 Something is happening...
[ test.pl: 2016-06-01 13:02:53 ]
7 Something else...
[ test.pl: 2016-06-01 13:02:54 ]
8 Nothing here
[ test.pl: 2016-06-01 13:02:55 ]
9 Something is happening...
[ test.pl: 2016-06-01 13:02:56 ]
10 Something else...
[ test.pl: 2016-06-01 13:02:57 ]
11 Nothing here
[ test.pl: 2016-06-01 13:02:58 ]
...

「ログオン」が構成ファイルにある場合でも、「-L」が必要であることがわかりました。

画面で使用される時間形式変数(%mなど)のリストが見つかりませんでした。これらの形式のリンクがある場合は、以下に投稿してください。

**追加**

「オンザフライ」で実行する場合は、次のスクリプトを使用できます。

#!/bin/bash
if [[ $2 == "" ]]; then
    echo "Usage: $0 name command";
    exit 1;
fi
name=$1
command=$2
path="/var/log";
config="logfile ${path}/${name}.log
logfile flush 1
log on
logtstamp after 1
logtstamp string \"[ %t: %Y-%m-%d %c:%s ]\012\"
logtstamp on";
echo "$config" > /tmp/log.conf
screen -c /tmp/log.conf -dmSL "$name" $command
rm /tmp/log.conf

使用するには、それを保存し(screen.sh)、+ xパーミッションを設定します:

./screen.sh TEST ./test.pl

...そして./test.plを実行し、/ var/log/TEST.logにログファイルを作成します

14
lepe

次のコマンドは、画面バージョン4.06.02で機能します

screen -L -Logfile Log_file_name_of_your_choice command_to_be_executed

画面のmanページから:

-Logfile file : By default logfile name is "screenlog.0". 
                You can set new logfile name with the "-Logfile" option.

screenの既存のバージョンを確認するには、screen -versionを使用します。 https://www.gnu.org/software/screen/ から最新のscreenバージョンをダウンロードしてインストールできます。

13
Nikhil

mac端末の場合:

script -a -t 0 out.txt screen /dev/ttyUSB0 115200 

詳細

  • 「ターミナルセッションのTypeScriptを作成する」アプリに組み込まれたscript
  • -a出力ファイルに追加
  • -t 0出力ファイルへの書き込み間隔は0秒なので、新しい文字ごとにout.txtが更新されます
  • out.txtは単なる出力ファイル名です
  • screen /dev/ttyUSB0 115200-外部デバイスに接続するための質問からのコマンド

その後、tailを使用して、ファイルが更新されていることを確認できます

テール-100 out.txt

13
ryan

Ctrl+A それから Shift+H 私のために働く。プログラムの実行中にファイルscreenlog.0を表示できます。

9
jaggedsoft

Unixでの 'script'コマンドがこのトリックを行うはずです。新しいコンソールの開始時に実行するだけで、うまくいくはずです。

5
Ruben

以下が役に立つかもしれません(テスト済み:Linux/Ubuntu 12.04):

cat /dev/ttyUSB0

上記を使用すると、必要なすべてのリダイレクトを実行できます。たとえば、ファイルに保存しながら出力をコンソールにダンプするには、次のようにします。

cat /dev/ttyUSB0 | tee console.log
4
Keo Malope

ここにトリックがあります:sh -cでラップします!

screen sh -c './some-script 2>&1 | tee mylog.log'

2>&1がstderrをstdoutにリダイレクトするため、teeはエラーメッセージをキャッチしてログに記録できます。

3
rkok