繁体   English   中英

Perl:系统返回码是 256 而不是 0

[英]Perl: system return code is 256 instead of 0

我有一个 oneliner(Windows 7/10 上的 perl 5):

C:\Windows>perl -e "$x=system('echo c:\users');print $x";

这给了我预期的输出:

c:\users
0

但如果我有这个:

C:\Windows>perl -e "$x=system('explorer c:\users');print $x";

这给了我:

256

并打开文件夹。

我很好奇为什么输出不是 0,因为命令正确执行。

类似的问题在这里,但没有得到回答。 这里的问题更具体。 也许有人可以回答这个具体问题。

更新1:

(1) 我更正了从 c:\\user 到 c:\\users 的路径。 之前的路径错误,打开了文件资源管理器 C:\\Users\\giordano\\Documents。 通过此更正,正确的文件夹已打开,但仍返回 256。

(2) 更好的编码:

C:\Windows>perl -e "system('explorer c:\users');print $?";

系统功能文档

返回值是等待调用返回的程序退出状态。 要获得实际退出值,请向右移动 8(见下文)。

相同的值设置在$? 这进一步证明了这一点

这只是传统的 Unix wait() 系统调用返回的 16 位状态字(或者看起来像它)。 因此,子进程的退出值真的是 ($?>> 8),而 $? & 127 给出了进程死于哪个信号(如果有),以及 $? & 128 报告是否有核心转储。

另请注意,如果存在 fork 或 exec 错误(在这种情况下 errno 设置在$! ),则可以将其设置为 -1。

所以这意味着在执行第二个命令时,它指示退出状态为 1 (256 >> 8)。 我不知道这在 Windows 的上下文中意味着什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM