0

私の論理では実行できないと言っている何かを実装しようとしています。しかし、なぜそれができないのかを理解するためにあなたの助けが必要です.

短いバージョンの質問

ファイルのリダイレクト ( >& または tee ) を使用せずに、スクリプトの stdout+stderr を csh に記録することは可能ですか?


質問の詳細な説明

ファイルリダイレクトの使用が許可されていないcshスクリプト(script1)の要件があります(しばらくして理由を説明します)。つまり、次のようなものは使用できません

echo just checking >& logfile

したがって、これまたはティーを使用してログファイルを作成することはできません。トップレベルのスクリプトである別のスクリプト (script2) もあります。

script1 をスタンドアロン モードで実行することも、script2 を介して実行することもできます。

どちらの場合も、logfile に script1 のログ (stdout+stderr) を作成する必要があります。

そのための2つの可能な(ただし完全ではない)オプションがあります

この行をscript2に書きます

./script1 >& logfile

しかし、script1 がスタンドアロン モードで実行されている場合、script1 をログ ファイルに記録できません。

別のオプションは、次のように script1 でファイル リダイレクトを使用することです。

echo test starting >> logfile
echo test over

この場合、2 つの欠点があります。1) 「テスト オーバー」は「テスト開始」の前に出力されます。つまり、コマンド ログの発生順序が不確かです。2) スクリプト全体をカバーするつもりなら、すべてのステートメントの後に >>& を置くのは面倒です。

他に方法はありますか?必要なものを手に入れることができます。つまり、ファイル リダイレクトなしで script1 を実行しても、その stdout+stderr をログ ファイルに記録できます。

4

1 に答える 1

2

あなたはcshに言及しているので、これは役に立たないかもしれません。反対に、csh が不適切であることで知られるスクリプト用の csh の使用をやめたくなるかもしれません。sh では、次のように簡単に実行できます。

#!/bin/sh
exec > logfile 2>&1
echo foo

foo (および後続のすべてのコマンドの出力とエラー) をログファイルに書き込むには

于 2012-04-18T17:59:57.597 に答える