--- not_a_command ---
exit: -1
system:
number: 2
string: No such file or directory
pipe: -1 (1111111111111111111111111111111111111111111111111111111111111111)
exit: 72057594037927935
signal: 127
core: 128
os: No such file or directory
--- bash -c not_a_command; exit 73 ---
exit: 18688
system:
number: 2
string: No such file or directory
pipe: 18688 (0100100100000000)
exit: 73
signal: 0
core: 0
os: No such file or directory
--- bash -c false ---
exit: 256
system:
number: 2
string: No such file or directory
pipe: 256 (0000000100000000)
exit: 1
signal: 0
core: 0
os: No such file or directory
--- bash -c false; exit 37 ---
exit: 9472
system:
number: 2
string: No such file or directory
pipe: 9472 (0010010100000000)
exit: 37
signal: 0
core: 0
os: No such file or directory
bash: not_a_command: command not found
bash: not_a_command: command not found
2条答案
按热度按时间vaqhlq811#
大概是这样的:
另请参见Perl错误变量。
iih3973s2#
这里的问题是,您希望看到一个命令的结果,该命令位于提供您可以检查的内容的命令之前。沿着,您正在运行的命令是
bash
。但是,我认为您可能不需要exit
命令,因为您已经可以从Perl的一个错误变量中获得该信息。下面的程序通过
system
运行一些东西,并查看各种错误变量(您可以在perlvar中阅读更多信息)。我也在Mastering Perl中写了更多关于这方面的内容:$!
是perl试图执行命令时出现的错误。它也是一个“dualvar”,意味着它有不同的字符串和数字值。$?
是关闭管道的状态(它还包括我们认为是命令的退出值)$^E
是额外的操作系统特定信息,在非Unix环境中很有用,包括Windows。这里有一个程序来尝试一些事情与系统然后检查各种错误变量。
下面是输出,我将用一些注解来打断它:
只运行
false
,退出时返回1。将其上移8位,得到256。但没有错误:程序做了它应该做的事情”尝试运行
/etc/hosts
是一个错误,它是一个不可执行的普通文件。system
根本无法启动程序。注意$!
现在有一个数字和字符串值。另外,退出代码是-1
,这意味着system
无法启动程序。不要担心那一长串的1,这只是来自64位系统上-1
一个产物:下一个几乎和
/etc/hosts
一样,但这次文件不存在。system
又一次无法启动命令,因此返回-1
。$!
中的值有不同的错误:下面我们来看看您的问题。这个问题试图运行一个不存在的文件,但这次
system
可以运行bash
,因此各种错误值略有不同。$!
的结果与上一次相同现在,再扩展一步,以获得您所拥有的:一个复合命令。第一个命令将失败,但bash会继续运行
exit
。最后一个命令将设置Perl的错误值中的值: