screen
の出力全体をファイルに保存して、後ですべてのコンテンツを確認する必要があります。
その理由は、シリアルポートを介してフラッシュメモリをダンプし、画面を使用してインターフェイスとインターフェイスするためです。
メモリ構造を確認するためにファイルに保存したいと思います。
私はもう試した :
$: screen /dev/ttyUSB0 115200 >> foo.txt
$: screen /dev/ttyUSB0 115200 | tee foo.txt
また、画面からbufferfileを使用しようとしましたが、使用方法がわかりません。
簡単な方法はありますか?
ロギング用のコマンドラインオプションがあります。出力はscreenlog.nファイルに保存されます。nは画面の番号です。画面のmanページから:
'-L'ウィンドウの自動出力ログをオンにするよう画面に指示します。
Control-a + Hを使用して、ロギングをscreenlog.nファイルに保存することもできます。もう1つControl-a + Hをオフにします。
C-a H:ファイル "screenlog.n"への現在のウィンドウのロギングを開始/終了します。
選択した回答は、複数のセッションではうまく機能せず、カスタムログファイル名を指定できません。
複数の画面セッションの場合、これは私の式です:
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にログファイルを作成します
次のコマンドは、画面バージョン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バージョンをダウンロードしてインストールできます。
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を使用して、ファイルが更新されていることを確認できます
テール-100 out.txt
Ctrl+A それから Shift+H 私のために働く。プログラムの実行中にファイルscreenlog.0
を表示できます。
Unixでの 'script'コマンドがこのトリックを行うはずです。新しいコンソールの開始時に実行するだけで、うまくいくはずです。
以下が役に立つかもしれません(テスト済み:Linux/Ubuntu 12.04):
cat /dev/ttyUSB0
上記を使用すると、必要なすべてのリダイレクトを実行できます。たとえば、ファイルに保存しながら出力をコンソールにダンプするには、次のようにします。
cat /dev/ttyUSB0 | tee console.log
ここにトリックがあります:sh -c
でラップします!
screen sh -c './some-script 2>&1 | tee mylog.log'
2>&1
がstderrをstdoutにリダイレクトするため、tee
はエラーメッセージをキャッチしてログに記録できます。