0

これを行うのに問題があります。私のスクリプトは、stout と stderr にメッセージを出力します。これらのメッセージはすべて、後で暇なときに表示できるファイルに送信されるようにしたいと考えています。

これが私が試したものです:

$location/myscript.pl -arg1 $var1 -arg2 $var2 -verbose 1 &>myscript.log

私のスクリプトにはいくつかの引数を設定する必要があるため、&>myscript.logを試してこのログ ファイルを作成し、そこにリダイレクトします。ただし、「無効な null コマンド」が表示され、キーパッドを押すと、実行しようとしたコマンドが次のように表示されます。

$location/myscript.pl -arg1 $var1 -arg2 $var2 -verbose 1 & > myscript.log

私の構文が間違っているか何かだと思います。

ありがとう。

4

4 に答える 4

2

このコードはあなたのアプローチには従いませんが、あなたにも役立つかもしれません。スクリプト内のagrumentsの1つを介して有効にすることができます。

#===
# x.pl
#===
use IO::Handle;
open(STDOUT_AND_ERR_LOG, ">stdout_and_err.log") or die;

# ensure all writes are immediately flushed STDOUT_AND_ERR_LOG->autoflush(1);

# redirect both stdout and err to the log *STDERR = *STDOUT = *STDOUT_AND_ERR_LOG;

# now try it
print "Hello stdout!\n";
print STDERR "Hello stderr!\n";
#=== EOF

ActiveState.comへのクレジット

于 2012-09-25T17:29:38.170 に答える
2

ikegamiが述べたように、 bashソリューションは次のとおりです。

script.pl ... >myscript.log 2>&1

私のFreeBSDボックスにはcshソリューションがあります:

script.pl ... >& myscript.log
于 2012-09-25T17:31:33.130 に答える
2
script.pl ... >myscript.log 2>&1
  • >myscript.log書き込み用にファイルを開き、そのハンドルを STDOUT に使用します。
  • 2>&1STDERR を STDOUT と同じハンドルにします。

順序が重要です。


の場合csh、最も簡単な方法は次のとおりです。

sh -c 'script.pl ... >myscript.log 2>&1'

わかりました、私は冗談です:)あなたは実際に行うことができます

script.pl ... >& file

cshのリダイレクション サポートは、 およびその派生物よりもはるかに制限されてshいますが、これはできることです。

于 2012-09-25T17:17:54.557 に答える
1

これを試して:

$location/myscript.pl -arg1 $var1 -arg2 $var2 -verbose 1 1>myscript.stdout 2>myscript.stderr

これにより、出力とエラーが 2 つの個別のファイルにリダイレクトされます。同じファイルでそれを行うには (これは stderr をリダイレクトして stdout に追加することを意味します):

$location/myscript.pl -arg1 $var1 -arg2 $var2 -verbose 1 > myscript.log 2>&1

于 2012-09-25T17:16:04.083 に答える