160

Screenの出力全体をファイルに保存して、後ですべてのコンテンツを確認する必要があります。

その理由は、フラッシュメモリをシリアルポート経由でダンプし、Screenを使用してフラッシュメモリとインターフェイスしているためです。メモリ構造を確認するためにファイルに保存したいのですが。

私はもう試した:

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

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

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

4

12 に答える 12

160

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

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

于 2014-03-06T14:46:50.063 に答える
125

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

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

于 2013-07-22T07:05:24.530 に答える
39

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

screen -L -Logfile Log_file_name_of_your_choice command_to_be_executed

Screenのmanページから:

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

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

于 2018-02-05T00:05:31.400 に答える
25

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

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

  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、「改行」を意味します: source\n

  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」が必要であることがわかりました。

screenで使用されている時間形式変数(%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にログファイルを作成します

于 2016-06-01T04:16:00.833 に答える
17

Mac端末の場合:

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

詳細

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

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

tail -100 out.txt
于 2014-09-29T06:36:58.630 に答える
11

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

于 2017-07-16T16:53:42.800 に答える
9

すでにアクティブに実行されている画面からスクロールバックバッファ全体の出力を保存する必要がある場合の別の答え:

Ctrl-a [ g SPACE G $ >.

これにより、バッファ全体が/ tmp/screen-exchangeに保存されます

于 2020-02-07T20:00:17.770 に答える
7

既存の画面ログは次の方法で保存できます。

Ctrl+A :ハードコピー-hファイル名

于 2020-05-29T12:24:51.683 に答える
6

ここにトリックがあります:それを包みますsh -c

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

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

于 2018-07-13T08:48:50.400 に答える
5

Unixでの「script」コマンドでうまくいくはずです。新しいコンソールの起動時に実行するだけで、問題はありません。

于 2013-01-08T04:05:43.780 に答える
5

以下が役立つ場合があります(Linux / Ubuntu 12.04(Precise Pangolin)でテスト済み):

cat /dev/ttyUSB0

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

cat /dev/ttyUSB0 | tee console.log
于 2014-02-13T23:33:53.977 に答える
0

クリーンな解決策を見つけるのに多くの費用がかかりました。以前の返信は問題ありませんが、これがより直接的であることがわかりました。このコマンドは、出力をファイルに書き込むために5秒間待機します。「sudo」の部分は環境によって異なります

screen -dm bash -c 'sleep 5;echo "done" | sudo tee ./test.txt'
于 2021-11-19T13:12:06.347 に答える