打印:不产生输出

Jos*_*dan 8 printing perl

我很困惑.我刚买了一台新的开发机器,perl似乎没有为打印命令输出任何东西.

#!/usr/bin/perl
use warnings;
use strict;
print "A";
print STDOUT "B";
print STDERR "C";
open FH, ">", "testprint';
print FH "D";
close FH;
Run Code Online (Sandbox Code Playgroud)

在控制台中不生成任何内容,并且testprint成为1-bye(空)文件.

即便这样也没有产生:

perl -e "print 'a';"
Run Code Online (Sandbox Code Playgroud)

这恰好发生在我的机器上的perl二进制文件中.我很困惑在哪里开始调试这个问题.有任何想法吗?

编辑:

perl -v

This is perl, v5.8.8 built for x86_64-linx-thread-multi
Run Code Online (Sandbox Code Playgroud)

which perl

/usr/bin/perl
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 9

我相信问题存在于Perl之外.或

  • 运行脚本时终端处于某种异常状态,
  • perl的父进程将perl终端的输出重定向,或者
  • perl的父进程没有提供STDOUT和STDERR perl.

您可以通过实际检查是否print返回错误来收集更多信息.(总是让我感到困惑的是,为什么当某些东西不能按预期的方式工作时,人们不会检查错误.)

perl -we'print("a") or die("Can'\''t print: $!\n");'
Run Code Online (Sandbox Code Playgroud)

您可以通过使用strace或在系统上调用它来收集更多信息.(寻找write(1write(2.)

strace perl -we'print("a") or die("Can'\''t print: $!\n");'
Run Code Online (Sandbox Code Playgroud)

但是如果问题出现在Perl之外,那些应该什么都不打印,这就是为什么尝试将输出重定向到文件然后检查文件及其大小可能是明智的.

perl -we'print("a") or die("Can'\''t print: $!\n");' 1>out 2>err
Run Code Online (Sandbox Code Playgroud)


Jos*_*dan 3

问题不是STDOUT丢失或从 shell 重定向,而是 shell 设置为在编写提示时发送不带换行符的回车符,从而覆盖发送到同一行的所有输出。

具体来说,我的旧版本已经设置zshpromptcr。有关详细信息,请参阅此处的问题 3.23 。