8

perlのスクリプトには次のものがあります:

print STDERR "Access error"

このメッセージが出力される場所を知りたいのですが、LInux で標準エラー出力を確認する方法がわかりません。

4

4 に答える 4

15

標準 ( STDOUT) とエラー出力 ( STDERR) の両方が (疑似) 端末に表示されます。

出力をトレースしたい場合:

エラーログ :

./script.pl 2> err.log

標準出力ログ:

./script.pl > out.log

両方STDERRSTDOUT同じファイル内:

./script.pl > out.log 2>&1

またはを使用:

./script.pl &> out.log

良いチュートリアル

于 2013-03-11T17:16:38.647 に答える
10

お使いの環境で標準エラーが設定されている場所に出力されます。

コンソールから実行している場合は、標準出力と混合されてコンソールに表示されます (STDOUT をリダイレクトしてもリダイレクトされません。個別にリダイレクトする必要があります)。

Apache の下で CGI から実行している場合は、error.log ファイル (Apache が保存するように構成されている場所) にドロップされます。

別の場所から実行している場合は、完全なリストは Stackoverflow の範囲外なので、より具体的な質問をしてみてください ;)

コンソールでの送信先の例:

david@raston err $ cat err.pl
#!/usr/bin/env perl

use strict;
use warnings;
use v5.16;

say "out";
say STDERR "error";
~/tmp/err :
david@raston err $ ./err.pl
out
error
~/tmp/err :
david@raston err $ ./err.pl > stdout
error
~/tmp/err :
david@raston err $ ./err.pl 2> stderr
out
于 2013-03-11T17:18:09.133 に答える
3

通常、STDOUT と STDERR はどちらも端末に出力されます。

$ perl -e'print "foo\n"; print STDERR "bar\n";'
foo
bar

ただし、どちらかまたは両方をリダイレクトすることは可能です。

$ perl -e'print "foo\n"; print STDERR "bar\n";' 2>stderr.log
foo

$ cat stderr.log
bar

たとえば、CGI スクリプトによって STDERR に送信されたデータは、通常、Web サーバーの構成で指定されたログ ファイルに格納されます。

Linux システムでは、プログラムが STDERR に関する情報を取得する可能性があります。

$ perl -e'system "ls -l /proc/$$/fd"' 2>stderr.log |cat
total 0
lrwx------ ... 0 -> /dev/pts/1
l-wx------ ... 1 -> pipe:[210178663]            <-- STDOUT is a pipe
l-wx------ ... 2 -> /home/ikegami/stderr.log    <-- STDERR is a file
lr-x------ ... 3 -> pipe:[210178668]
于 2013-03-11T17:48:56.097 に答える
2

ターミナルで Perl スクリプトを実行する必要があります。システムに X があるかどうかに応じてxterm、仮想コンソール ( tty1-7) を使用してスクリプトを実行できます。stderrとの両方stdoutがこれらのデバイスに接続されています。

于 2013-03-11T17:16:45.270 に答える