コマンドと実行結果を同時にファイルに保存する方法

コマンドと実行結果を同時にファイルに保存する方法

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

その場合、ファイルは次のように見えますsomecommandmountlogfile

+ 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人々が入力したときと同じように、複合コマンドのシェルトレースが表示されないため、同様のユーティリティを使用する他の回答がより適切になる可能性があります。変数などもトレース出力で拡張されます。

おすすめ記事