2016-04-16 26 views
15

我試圖從下面的Perl腳本打印到標準輸出,但它不會在屏幕上產生任何輸出。然而,它確實打印到一個文件。爲什麼Perl的打印無法輸出任何內容到STDOUT和STDERR,但是成功寫入文件?

#!/usr/bin/perl 
use warnings; 
use strict; 

print "Here's some text\n"; 
print STDERR "Here's some text\n"; 
print STDOUT "Here's some text\n"; 

open FH, ">", "file.txt" or die $!; 

print FH "Here's some text\n"; 

我試圖檢查的perl版本我使用(perl -v),但要麼不輸出任何東西。 perl手冊頁告訴我我正在使用5.14.2。我從Raspberry Pi的bash提示符運行Perl腳本。

我看到類似的帖子Print: producing no output,所以我用strace看到輸出沒有包含任何寫入命令。

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

下面是strace的輸出爲完整的腳本:

execve("./response", ["./response"], [/* 18 vars */]) = 0 
brk(0)         = 0xd98000 
uname({sys="Linux", node="raspberrypi", ...}) = 0 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f99000 
access("/etc/ld.so.preload", R_OK)  = 0 
open("/etc/ld.so.preload", O_RDONLY) = 3 
fstat64(3, {st_mode=S_IFREG|0644, st_size=44, ...}) = 0 
mmap2(NULL, 44, PROT_READ|PROT_WRITE, MAP_PRIVATE, 3, 0) = 0xb6f98000 
close(3)        = 0 
open("/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so", O_RDONLY) = 3 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\270\4\0\0004\0\0\0"..., 512) = 512 
lseek(3, 7276, SEEK_SET)    = 7276 
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1080) = 1080 
lseek(3, 7001, SEEK_SET)    = 7001 
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 47) = 47 
fstat64(3, {st_mode=S_IFREG|0755, st_size=10170, ...}) = 0 
mmap2(NULL, 39740, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6f6c000 
mprotect(0xb6f6e000, 28672, PROT_NONE) = 0 
mmap2(0xb6f75000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0xb6f75000 
close(3)        = 0 
munmap(0xb6f98000, 44)     = 0 
open("/etc/ld.so.cache", O_RDONLY)  = 3 
fstat64(3, {st_mode=S_IFREG|0644, st_size=64456, ...}) = 0 
mmap2(NULL, 64456, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb6f5c000 
close(3)        = 0 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
open("/usr/lib/libperl.so.5.14", O_RDONLY) = 3 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\220\v\2\0004\0\0\0"..., 512) = 512 
lseek(3, 1346508, SEEK_SET)    = 1346508 
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1120) = 1120 
lseek(3, 1346184, SEEK_SET)    = 1346184 
read(3, "A2\0\0\0aeabi\0\1(\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 51) = 51 
fstat64(3, {st_mode=S_IFREG|0644, st_size=1347628, ...}) = 0 
mmap2(NULL, 1379192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6e0b000 
mprotect(0xb6f4f000, 32768, PROT_NONE) = 0 
mmap2(0xb6f57000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x144) = 0xb6f57000 
close(3)        = 0 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
open("/lib/arm-linux-gnueabihf/libdl.so.2", O_RDONLY) = 3 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0(\t\0\0004\0\0\0"..., 512) = 512 
lseek(3, 8652, SEEK_SET)    = 8652 
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1160) = 1160 
lseek(3, 8320, SEEK_SET)    = 8320 
read(3, "A0\0\0\0aeabi\0\1&\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 49) = 49 
fstat64(3, {st_mode=S_IFREG|0644, st_size=9812, ...}) = 0 
mmap2(NULL, 41136, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6e00000 
mprotect(0xb6e02000, 28672, PROT_NONE) = 0 
mmap2(0xb6e09000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0xb6e09000 
close(3)        = 0 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
open("/lib/arm-linux-gnueabihf/libm.so.6", O_RDONLY) = 3 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\3201\0\0004\0\0\0"..., 512) = 512 
lseek(3, 426468, SEEK_SET)    = 426468 
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1160) = 1160 
lseek(3, 426136, SEEK_SET)    = 426136 
read(3, "A0\0\0\0aeabi\0\1&\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 49) = 49 
fstat64(3, {st_mode=S_IFREG|0644, st_size=427628, ...}) = 0 
mmap2(NULL, 458912, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6d8f000 
mprotect(0xb6df7000, 28672, PROT_NONE) = 0 
mmap2(0xb6dfe000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x67) = 0xb6dfe000 
close(3)        = 0 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
open("/lib/arm-linux-gnueabihf/libpthread.so.0", O_RDONLY) = 3 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\274V\0\0004\0\0\0"..., 512) = 512 
lseek(3, 82712, SEEK_SET)    = 82712 
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1400) = 1400 
lseek(3, 82308, SEEK_SET)    = 82308 
read(3, "A0\0\0\0aeabi\0\1&\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 49) = 49 
fstat64(3, {st_mode=S_IFREG|0755, st_size=116462, ...}) = 0 
mmap2(NULL, 123412, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6d70000 
mprotect(0xb6d84000, 28672, PROT_NONE) = 0 
mmap2(0xb6d8b000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x13) = 0xb6d8b000 
mmap2(0xb6d8d000, 4628, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6d8d000 
close(3)        = 0 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
open("/lib/arm-linux-gnueabihf/libc.so.6", O_RDONLY) = 3 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\214y\1\0004\0\0\0"..., 512) = 512 
lseek(3, 1215264, SEEK_SET)    = 1215264 
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1360) = 1360 
lseek(3, 1214828, SEEK_SET)    = 1214828 
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 47) = 47 
fstat64(3, {st_mode=S_IFREG|0755, st_size=1216624, ...}) = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f98000 
mmap2(NULL, 1258784, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6c3c000 
mprotect(0xb6d62000, 32768, PROT_NONE) = 0 
mmap2(0xb6d6a000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x126) = 0xb6d6a000 
mmap2(0xb6d6d000, 9504, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6d6d000 
close(3)        = 0 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
open("/lib/arm-linux-gnueabihf/libcrypt.so.1", O_RDONLY) = 3 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\30\7\0\0004\0\0\0"..., 512) = 512 
lseek(3, 29116, SEEK_SET)    = 29116 
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1160) = 1160 
lseek(3, 28780, SEEK_SET)    = 28780 
read(3, "A0\0\0\0aeabi\0\1&\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 49) = 49 
fstat64(3, {st_mode=S_IFREG|0644, st_size=30276, ...}) = 0 
mmap2(NULL, 221504, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6c05000 
mprotect(0xb6c0c000, 28672, PROT_NONE) = 0 
mmap2(0xb6c13000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6) = 0xb6c13000 
mmap2(0xb6c15000, 155968, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6c15000 
close(3)        = 0 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
open("/lib/arm-linux-gnueabihf/libgcc_s.so.1", O_RDONLY) = 3 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0`\364\0\0004\0\0\0"..., 512) = 512 
lseek(3, 130212, SEEK_SET)    = 130212 
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1160) = 1160 
lseek(3, 129880, SEEK_SET)    = 129880 
read(3, "A2\0\0\0aeabi\0\1(\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 51) = 51 
fstat64(3, {st_mode=S_IFREG|0644, st_size=131372, ...}) = 0 
mmap2(NULL, 162704, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6bdd000 
mprotect(0xb6bfd000, 28672, PROT_NONE) = 0 
mmap2(0xb6c04000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1f) = 0xb6c04000 
close(3)        = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f97000 
set_tls(0xb6f976d0, 0xb6f97da8, 0xb6f9c048, 0xb6f976d0, 0xb6f9c048) = 0 
mprotect(0xb6c13000, 4096, PROT_READ) = 0 
mprotect(0xb6d6a000, 8192, PROT_READ) = 0 
mprotect(0xb6d8b000, 4096, PROT_READ) = 0 
mprotect(0xb6dfe000, 4096, PROT_READ) = 0 
mprotect(0xb6e09000, 4096, PROT_READ) = 0 
mprotect(0xb6f57000, 8192, PROT_READ) = 0 
mprotect(0x11000, 4096, PROT_READ)  = 0 
mprotect(0xb6f9b000, 4096, PROT_READ) = 0 
munmap(0xb6f5c000, 64456)    = 0 
set_tid_address(0xb6f97278)    = 12607 
set_robust_list(0xb6f97280, 0xc)  = 0 
futex(0xbece6778, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, b6d8c000) = -1 EAGAIN (Resource temporarily unavailable) 
rt_sigaction(SIGRTMIN, {0xb6d7520c, [], SA_SIGINFO|0x4000000}, NULL, 8) = 0 
rt_sigaction(SIGRT_1, {0xb6d750b4, [], SA_RESTART|SA_SIGINFO|0x4000000}, NULL, 8) = 0 
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0 
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0 
rt_sigaction(SIGFPE, {SIG_IGN, [FPE], SA_RESTART|0x4000000}, {SIG_DFL, [], 0}, 8) = 0 
brk(0)         = 0xd98000 
brk(0xdb9000)       = 0xdb9000 
getuid32()        = 1001 
geteuid32()        = 1001 
getgid32()        = 1004 
getegid32()        = 1004 
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3 
fstat64(3, {st_mode=S_IFREG|0644, st_size=1534656, ...}) = 0 
mmap2(NULL, 1534656, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb6a66000 
close(3)        = 0 
open("/dev/urandom", O_RDONLY|O_LARGEFILE) = 3 
read(3, "~\210\223\234", 4)    = 4 
close(3)        = 0 
gettimeofday({1460938704, 307768}, NULL) = 0 
readlink("/proc/self/exe", "/usr/bin/perl", 4095) = 13 
stat64("/usr/local/lib/site_perl/5.14.2/arm-linux-gnueabihf-thread-multi-64int", 0xbece6368) = -1 ENOENT (No such file or directory) 
stat64("/usr/local/lib/site_perl/5.14.2", 0xbece6368) = -1 ENOENT (No such file or directory) 
stat64("/usr/local/lib/site_perl/arm-linux-gnueabihf-thread-multi-64int", 0xbece6368) = -1 ENOENT (No such file or directory) 
open("./response", O_RDONLY|O_LARGEFILE) = 3 
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbece627c) = -1 ENOTTY (Inappropriate ioctl for device) 
_llseek(3, 0, [0], SEEK_CUR)   = 0 
fcntl64(3, F_SETFD, FD_CLOEXEC)   = 0 
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0 
brk(0xddb000)       = 0xddb000 
read(3, "#!/usr/bin/perl\nuse warnings;\nus"..., 8192) = 210 
stat64("/etc/perl/warnings.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) 
stat64("/etc/perl/warnings.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) 
stat64("/usr/local/lib/perl/5.14.2/warnings.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) 
stat64("/usr/local/lib/perl/5.14.2/warnings.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) 
stat64("/usr/local/share/perl/5.14.2/warnings.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) 
stat64("/usr/local/share/perl/5.14.2/warnings.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) 
stat64("/usr/lib/perl5/warnings.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) 
stat64("/usr/lib/perl5/warnings.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) 
stat64("/usr/share/perl5/warnings.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) 
stat64("/usr/share/perl5/warnings.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) 
stat64("/usr/lib/perl/5.14/warnings.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) 
stat64("/usr/lib/perl/5.14/warnings.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) 
stat64("/usr/share/perl/5.14/warnings.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) 
stat64("/usr/share/perl/5.14/warnings.pm", {st_mode=S_IFREG|0644, st_size=15015, ...}) = 0 
open("/usr/share/perl/5.14/warnings.pm", O_RDONLY|O_LARGEFILE) = 4 
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbece5be4) = -1 ENOTTY (Inappropriate ioctl for device) 
_llseek(4, 0, [0], SEEK_CUR)   = 0 
read(4, "# -*- buffer-read-only: t -*-\n# "..., 8192) = 8192 
read(4, "08\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x"..., 8192) = 6823 
read(4, "", 8192)      = 0 
close(4)        = 0 
brk(0xdfc000)       = 0xdfc000 
stat64("/etc/perl/strict.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) 
stat64("/etc/perl/strict.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) 
stat64("/usr/local/lib/perl/5.14.2/strict.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) 
stat64("/usr/local/lib/perl/5.14.2/strict.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) 
stat64("/usr/local/share/perl/5.14.2/strict.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) 
stat64("/usr/local/share/perl/5.14.2/strict.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) 
stat64("/usr/lib/perl5/strict.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) 
stat64("/usr/lib/perl5/strict.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) 
stat64("/usr/share/perl5/strict.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) 
stat64("/usr/share/perl5/strict.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) 
stat64("/usr/lib/perl/5.14/strict.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) 
stat64("/usr/lib/perl/5.14/strict.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) 
stat64("/usr/share/perl/5.14/strict.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) 
stat64("/usr/share/perl/5.14/strict.pm", {st_mode=S_IFREG|0644, st_size=879, ...}) = 0 
open("/usr/share/perl/5.14/strict.pm", O_RDONLY|O_LARGEFILE) = 4 
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbece5be4) = -1 ENOTTY (Inappropriate ioctl for device) 
_llseek(4, 0, [0], SEEK_CUR)   = 0 
read(4, "package strict;\n\n$strict::VERSIO"..., 8192) = 879 
_llseek(4, 878, [878], SEEK_SET)  = 0 
_llseek(4, 0, [878], SEEK_CUR)   = 0 
close(4)        = 0 
read(3, "", 8192)      = 0 
open("file.txt", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 4 
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbece614c) = -1 ENOTTY (Inappropriate ioctl for device) 
_llseek(4, 0, [0], SEEK_CUR)   = 0 
fstat64(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 
fcntl64(4, F_SETFD, FD_CLOEXEC)   = 0 
rt_sigaction(SIG_0, NULL, {0xb6e18dc4, [TRAP RTMIN RT_1 RT_2 RT_3 RT_12 RT_13 RT_15 RT_16 RT_18 RT_19 RT_20 RT_25 RT_26 RT_27 RT_28 RT_29], SA_SIGINFO|0x85b8}, 8) = -1 EINVAL (Invalid argument) 
rt_sigaction(SIGHUP, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGINT, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGQUIT, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGILL, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGTRAP, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGABRT, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGBUS, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGFPE, NULL, {SIG_IGN, [FPE], SA_RESTART|0x4000000}, 8) = 0 
rt_sigaction(SIGKILL, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGUSR1, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGSEGV, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGUSR2, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGPIPE, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGALRM, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGTERM, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGSTKFLT, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGCONT, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGSTOP, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGTSTP, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGTTIN, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGTTOU, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGURG, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGXCPU, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGXFSZ, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGVTALRM, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGPROF, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGWINCH, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGIO, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGPWR, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGSYS, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_2, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_3, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_4, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_5, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_6, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_7, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_8, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_9, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_10, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_11, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_12, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_13, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_14, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_15, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_16, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_17, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_18, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_19, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_20, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_21, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_22, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_23, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_24, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_25, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_26, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_27, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_28, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_29, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_30, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_31, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGRT_32, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGABRT, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGIO, NULL, {SIG_DFL, [], 0}, 8) = 0 
rt_sigaction(SIGSYS, NULL, {SIG_DFL, [], 0}, 8) = 0 
write(4, "Here's some text\n", 17)  = 17 
close(4)        = 0 
close(3)        = 0 
exit_group(0)       = ? 

,爲什麼它不產生輸出的任何想法?一個bash腳本可以將文本回顯到標準輸出。

當我在調試模式下運行腳本時,它會打印輸出。

在命令行執行perl -v後,出口代碼從$?爲0

執行

perl -e'print "foo" or die $!' 

得到和的9退出代碼,但是這似乎是由於管芯。 perl -v>文件沒有寫入任何文件。

這裏是STAT STDOUT的輸出,並且用於將其寫入到一個文件的命令:

45826 | 261126 | 33188 | 1 | 1001 | 1004 | 0 | 0 | 1461024408 | 1461035504 | 1461035504 | 4096 | 0

perl -e 'open my $FH, ">file"; print $FH join "|", stat STDOUT ' 
+1

如果'perl -v'也沒有產生任何輸出,問題可能不在perl中。 – Henrik

+0

@Henrik:你的意思是「如果'perl -v'沒有產生任何輸出,問題可能與Perl的安裝有關嗎?這將是我對'perl -v'沒有輸出的解釋';如果這不會產生版本號和版權聲明(我得到的前兩行是'This is perl 5,version 22,subversion 0(v5.22.0)for darwin-2level' and'Copyright 1987-2015,Larry Wall',再加上一些許可證信息),那麼Perl有一個主要問題。 –

+0

@JonathanLeffler:或者與終端,但你說的對,問題可能是安裝perl,但它不可能與perl代碼 - 這實際上是我的意思。 – Henrik

回答

-1

嘗試的use線後加入$|=1

#!/usr/bin/perl 
use warnings; 
use strict; 

$|=1; 

print "Here's some text\n"; 
print STDERR "Here's some text\n"; 
print STDOUT "Here's some text\n"; 

open FH, ">", "file.txt" or die $!; 

print FH "Here's some text\n"; 

你strace的輸出也表明了打印到文件在腳本退出完成,而不是而S由於Perl的輸出緩衝,cript正在運行。

如果$|=1沒有幫助:嘗試讓你的腳本中使用的文件描述符:

#!/usr/bin/perl 
system "ls -l /proc/$$/fd"; 

#!/usr/bin/perl 
system "lsof -p $$"; 

他們應該給你一個提示,其中輸出應該去。

+4

這與緩衝無關,從我可以告訴。即使嘗試任何I/O,「print」也會報告EBADF並退出。如果這只是一個緩衝問題,那麼仍然會有「寫入」調用。看起來'pp_print'在'if'或'else' [here](https://github.com/Perl/perl5/blob/v5.14.4/pp_hot.c#L738)中退出(鏈接到5.14。 4,因爲5.14.2標籤不在github鏡像上)。 – ThisSuitIsBlackNot

6

在開始閱讀之前,先看看這個命令的輸出。一切都指向STDOUT指向不正確的地方。

ls -l /proc/$$/fd/{1,2} 

在我的系統我得到這個,注意它不改變,因爲我寫這篇文章,因爲這不是一氣呵成寫的。

lrwx------ 1 root root 64 May 3 17:01 /proc/27806/fd/1 -> /dev/pts/1 
lrwx------ 1 root root 64 May 3 17:01 /proc/27806/fd/2 -> /dev/pts/1 

我懷疑上述對你來說是相似的。該stat看起來對我來說很可疑,如果我有權訪問filesytem,我會搜索inode,它告訴我它寫入ie。

sudo find/-printf "%i:\t%p\n"|grep 261126 

如果Perl的啓動時,它正在改變它的標準輸出等錯了地方我會很長時間的睡眠添加到腳本時,然後做搜索,看看它在哪裏。如果文件是常規文件,並且在文件系統上,則應該找到它。

我在stdout

|dev |inode |mode |link |uid |gid |rdev |size |atime  |mtime  |ctime  |blk |blka 
|13 |3  |8592 |1 |1000|5 |34816|0 |1462301986|1462301986|1462301958|1024|0 

你STAT的統計上STDOUT

|dev |inode |mode |link |uid |gid |rdev |size |atime  |mtime  |ctime  |blk |blka 
|45826 |261126 |33188 |1 |1001|1004|0 |0 |1461024408|1461035504|1461035504|4096|0 

對礦井我dev具有副號碼13,當我下的設備搜索它看起來確定。如果我們遮住你滅來顯示主/次你有...

major == 179 
minor == 2 

注意,我本來這些反向直到Wumpus Q. Wumbley糾正。

在我的機器,這是

crw------- 1 root root 2, 179 Apr 29 12:50 ptya3 

對礦井我rdev相當於

major == 136 
minor == 0 

在我的Debian系統,這是/dev/pts/0。你的rdev是0.我有一個快速的外觀和一些使用屏幕的人可能有/dev/pts/N問題,即它不存在,但這是我猜。

的strace的也非常奇怪,我得到了以下線路時,它寫在我的系統:

read(3, "#!/usr/bin/perl -w\n#use strict;\n"..., 8192) = 228 
read(3, "", 8192)      = 0 
close(3)        = 0 
write(1, "Here's some text STDOUT\n", 24Here's some text STDOUT 
) = 24 
write(2, "Here's some text STDERR\n", 24Here's some text STDERR 
) = 24 
write(1, "Here's some text STDOUT\n", 24Here's some text STDOUT 
) = 24 

,這些出現在你strace的任何地方是很奇怪的事實。你可以通過修改$|來改變出現的位置,但它們應該出現在某處。 Gilles注意到該模式也很奇怪。如果您運行此腳本...

#!/usr/bin/perl 
use warnings; 
use strict; 
use Fcntl ':mode'; 
my $mode = 33188; 
my $user_rwx  = ($mode & S_IRWXU) >> 6; 
print("user_rwx  = $user_rwx\n"); 
my $group_read = ($mode & S_IRGRP) >> 3; 
print("group_read = $group_read\n"); 
my $other_execute = $mode & S_IXOTH; 
print("other_execute = $other_execute\n"); 
printf "Permissions are %04o\n", S_IMODE($mode), "\n"; 
my $is_setuid  = $mode & S_ISUID; 
print("is_setuid  = $is_setuid\n"); 
my $is_directory = S_ISDIR($mode); 
print("dir   = $is_directory\n"); 
my $is_reg = S_ISREG($mode); 
print("regular  = $is_reg\n"); 

您可以看到STDOUT似乎指向一個常規文件。這可以確認爲什麼rdev爲零,即如果stdout重定向到某個設備,但實際上只是一個普通文件。我發現在chroot環境下發生的奇怪事情,設備安裝不正確。

不管在退出時是否打開或關閉緩衝區,緩衝區應該已經被刷新,也就是說你會看到對write sys調用的調用。在strace中根本沒有任何寫入是很奇怪的。

+0

我認爲你已經有了大逆轉。塊設備179,2可能是mmcblk0p2,這比2,179(某種軟盤)更有意義。因爲(通過mode = 33188 = 0100644)看起來是'find/-inum 261126 -ls'的結果會非常有趣,它似乎是一個常規文件,而不是tty(這也解釋了rdev = 0) –

+0

@WumpusQ .Wumbley在我的機器上2,179是/ dev/ptsya3,136,0是/ dev/pts/0。不同的機器可能會顯示不同的數字。我在Debian上用4。5內核。 – Harry

+0

好的,你說得對,136,0是136 * 256 + 0 = 34186,但是179,2是179 * 256 + 2 = 45826。每個主要次要號碼對有2個設備:一個字符設備和一個塊設備。您找到的pty是字符設備2,179。塊設備2,179將是fd7h410(第二個軟盤控制器上的第三個軟盤驅動器,帶有一個410K格式的5.25英寸磁盤!) –

1

嘗試創建一個新的用戶帳戶,並使用它來查看是否出現同樣的問題,我也會嘗試一個新的Perl,因爲我無法在其上有5.22的pi上重現此操作。這看起來很像你在shell中有一些意想不到的東西,一個是模塊安裝失敗,或者你有一個神祕的提示命令,那就是吞噬輸出。

在你的strace中缺少對STDOUT和STDERR的寫入表明它們在代碼運行之前以某種方式打開了錯誤的方式。

4

有在信息了一些有趣的線索您提供:

perl -e'print "foo" or die $!'給了9退出代碼,這是EBADF,這意味着stdout是指向一個錯誤的文件描述符。這可能是一些任意數字(因爲底層文件描述符只是數字),或者它可能是一個文件描述符,它曾被打開但現在已關閉。 (這也意味着它不是,比方說,重定向到/ dev/null的 - 這將導致沒有產量,但不會給出錯誤。)

strace輸出顯示了幾個openclose電話,他們都似乎是配對的 - 沒有關閉STDOUT的證據。重要的是,調用所有返回的FD 3(以及後來的FD 4,在FD 3仍在使用的情況下) - 在類Unix系統上,open通常返回最低未使用的FD,所以這進一步證明了FD 1(通常的STDOUT)在您的流程啓動後尚未關閉。

所以其含義是STDOUT沒有連接到FD 1,而是與其他一些FD相關聯。運行以下應該告訴你什麼FD是:

perl -e 'open my $FH, ">", file.txt"; print $FH fileno(STDOUT)' 

我猜測,這將是一些任意的號碼,並在您的樹莓派專門針對安裝一些問題的結果 - 也許一些腐敗庫。但作爲suggestedSebastian,您可以運行lsof以查明您的進程打開了哪些FD(將sleep添加到您的腳本以保持運行)或查看/ proc。但是,可能STDOUT指的是一些實際上不是開放式FD的東西。有點好奇,你的strace輸出甚至不會顯示對write的錯誤呼叫;這意味着Perl確實知道FD是無效的。

另一個有趣的實驗,嘗試運行此:

perl -e 'system qw(echo hello)' 

如果產生的輸出,那麼這意味着該子過程繼承了還是開FD 1,這也進一步表明,Perl是不好狀態並且具有與意外的FD相關聯的STDOUT。

還有另一件事嘗試是這樣的:

perl -le 'open(STDOUT, ">&1"); print "hello"' 

這是一個企圖通過與FD 1(我推斷的FD dup2()「d重新打開它「修復」標準輸出仍然是開放的,而不是與STDOUT相關聯)。如果這樣會產生輸出,那麼至少這是一種可能的解決方法,儘管仍然不是對原始原因的解釋(我擔心這仍然是難以理解的)。

一個側面說明:

perl -MConfig -le 'open my $FH, ">", version.txt"; print Config::myconfig(); print foreach Config::local_patches()' 

第二部分,關於本地應用的修補程序,可能給一個線索是否:雖然perl -V不給你任何輸出,您可以通過運行獲取信息對您安裝的perl進行了非標準操作。

+0

好吧,這很不幸。兩個很好的答案,但OP是AWOL,我不能重現他們的問題。這是一個非常艱難的決定,但由於建議的解決方法和建議檢查'Config'(因爲OP聲稱Bash腳本正常工作,看起來可能是Perl配置錯誤),所以我將該賞金獎勵給此人。 – ThisSuitIsBlackNot

+0

@ThisSuitIsBlackNot Nevermind我可以看到你添加了賞金。 – Harry

+0

@哈里我。我希望OP能夠真正迴應所有的評論和回答,但他們從來沒有這樣做過,儘管他們的個人資料中的「Last Seen」表明自從我發佈獎金以來他們多次進行了檢查。 – ThisSuitIsBlackNot

相關問題