我在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
通常情况下,标准输出和错误输出都会输出到终端。
$ 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
$ 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
。