perlのスクリプトには次のものがあります:
print STDERR "Access error"
このメッセージが出力される場所を知りたいのですが、LInux で標準エラー出力を確認する方法がわかりません。
お使いの環境で標準エラーが設定されている場所に出力されます。
コンソールから実行している場合は、標準出力と混合されてコンソールに表示されます (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
通常、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]
ターミナルで Perl スクリプトを実行する必要があります。システムに X があるかどうかに応じてxterm
、仮想コンソール ( tty1-7
) を使用してスクリプトを実行できます。stderr
との両方stdout
がこれらのデバイスに接続されています。