java -cp src/ nlp.lm.BigramModel wsj/ 0.1
コマンドがあり、コマンド自体とコマンド実行出力の両方をファイルに保存したいとします。
これを行う1つの方法は次のとおりです。
echo "$ java -cp src/ nlp.lm.BigramModel atis/ 0.1" > trace/bigram-trace.txt
java -cp src/ nlp.lm.BigramModel atis/ 0.1 >> trace/bigram-trace.txt
もっと良い方法がありますか?
ベストアンサー1
( exec >logfile 2>&1; set -x; somecommand )
そうでなければ
( set -x; somecommand ) >logfile 2>&1
これにより、サブシェルでトレースが有効(...)
になり、すべての出力がファイルにリダイレクトされますlogfile
。
その場合、ファイルは次のように見えますsomecommand
。mount
logfile
+ mount
/dev/sd0a on / type ffs (local)
/dev/sd0d on /tmp type ffs (local, nodev, nosuid, softdep)
/dev/sd0e on /var type ffs (local, nodev, nosuid)
/dev/sd0f on /usr type ffs (local, nodev)
/dev/sd0g on /usr/local type ffs (local, nodev, wxallowed)
/dev/sd0h on /home type ffs (local, nodev, nosuid, wxallowed, softdep)
/dev/sd0j on /backup type ffs (local, nodev, nosuid)
/dev/sd0k on /extra type ffs (local, nodev, nosuid, wxallowed, softdep)
mfs:92196 on /tmp_mfs type mfs (asynchronous, local, nodev, nosuid, wxallowed, size=8388608 512-blocks)
コマンド+␣
(プラス記号とスペース)の前にあるものはトレースプロンプトまたは4次プロンプトであり、プロンプトPS4
文字列を設定して変更できます。
( PS4='$ '; set -x; df /tmp ) >logfile 2>&1
上記のような結果が出ることがあります
$ df /tmp
Filesystem 512-blocks Used Avail Capacity Mounted on
/dev/sd0d 10315164 160 9799248 0% /tmp
存在するlogfile
。
これはおそらく必要な簡単なコマンドに適しています。複合コマンドでは、script
人々が入力したときと同じように、複合コマンドのシェルトレースが表示されないため、同様のユーティリティを使用する他の回答がより適切になる可能性があります。変数などもトレース出力で拡張されます。