2013-03-11 36 views
2

stderr输出在脚本在Perl我有以下几点:怎么看在linux

print STDERR "Access error" 

我想知道打印此消息在哪里,但我不知道我怎么能看到的标准配置错误以LInux输出。

+0

应该是你的控制台。 – chrsblck 2013-03-11 17:16:55

+3

你如何运行你的脚本? – Mark 2013-03-11 17:17:08

回答

7

它被打印到任何地方标准误差设置为您的环境。

如果您是从控制台运行它,那么它将与标准输出混合并显示在控制台上(如果重定向STDOUT,则不必重定向,您必须单独重定向)。

如果从CGI在Apache下运行它,然后它会被丢弃到您的error.log文件(无论Apache的配置为保存)。

如果是从别的地方......好一个详尽的清单运行它超出范围为#1,所以你应该尝试问一个更具体的问题;)的地方可能被定向到在控制台

例子:

[email protected] err $ cat err.pl 
#!/usr/bin/env perl 

use strict; 
use warnings; 
use v5.16; 

say "out"; 
say STDERR "error"; 
~/tmp/err : 
[email protected] err $ ./err.pl 
out 
error 
~/tmp/err : 
[email protected] err $ ./err.pl > stdout 
error 
~/tmp/err : 
[email protected] err $ ./err.pl 2> stderr 
out 
8

标准(STDOUT)和错误输出(STDERR)都显示在您的(伪)终端上。

如果你想跟踪的输出:

错误日志:

./script.pl 2> err.log 

标准输出日志:

./script.pl > out.log 

STDERR,并在同一个文件STDOUT

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

./script.pl &> out.log 

一个好的tutorial

2

您需要在终端上运行Perl脚本。根据您是否有X您的系统或没有,你可以使用xterm或者你可以使用一个虚拟控制台(tty1-7)来运行你的脚本。 stderrstdout都连接到这些设备。

2

通常情况下,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服务器配置中指定的日志文件结束。

这有可能为一个程序,以获取有关STDERR在Linux系统上的信息。

$ 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]