如何在Linux中查看标准错误输出

11

我在Perl脚本中有以下内容:

print STDERR "Access error"

我想知道这条消息在哪里打印出来,但我不知道在Linux中如何查看标准错误输出。


应该是你的控制台。 - chrsblck
3
你是如何运行你的脚本的? - Mark
4个回答

20

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

如果您想跟踪这些输出:

错误日志:

./script.pl 2> err.log

标准输出日志:

./script.pl > out.log

STDERRSTDOUT 内容输出至同一个文件:


Translated text:

STDERRSTDOUT 内容输出至同一个文件:

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

或者使用

./script.pl &> out.log

一份好的教程


11

它会被打印到您的环境中设置为标准错误的位置。

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

3

通常情况下,标准输出和错误输出都会输出到终端。

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

2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接