如何在linux中查看stderr输出

时间:2013-03-11 17:14:40

标签: linux perl

在perl的脚本中,我有以下内容:

print STDERR "Access error"

我想知道这条消息的打印位置,但我不知道如何在LInux中看到Standar错误输出。

4 个答案:

答案 0 :(得分:12)

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

如果要跟踪输出:

错误日志:

./script.pl 2> err.log

标准输出日志:

./script.pl > out.log

同一文件中的STDERRSTDOUT

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

./script.pl &> out.log

tutorial

答案 1 :(得分:9)

打印到您的环境设置标准错误的位置。

如果从控制台运行它,它将与标准输出混合并显示在控制台上(如果重定向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

答案 2 :(得分:2)

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

答案 3 :(得分: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服务器配置中指定的日志文件中。

程序可以在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]