为什么在成功运行Perl脚本后退出代码为1?

时间:2012-07-20 05:06:15

标签: perl batch-file exit-code

当我尝试运行我的Perl脚本时,它会成功执行。稍后,当我运行此命令echo %errorlevel%时,它会将输出显示为1.为什么?

2 个答案:

答案 0 :(得分:5)

如果Perl返回错误级别1,则调用exit(1)

>perl -e"exit 1"
>echo %errorlevel%
1

$?1处理程序

中设置为END
>perl -e"END { $? = 1; }"
>echo %errorlevel%
1

或程序在$!1

时死亡
>perl -e"$!=1; die;"
Died at -e line 1.
>echo %errorlevel%
1

(这通常表示系统调用因“不允许操作”而失败)

>perl -E"say $!=1"
Operation not permitted

或当$!0$?(1 << 8)时,该程序就会死亡。

>perl -e"$!=0; $?=1<<8; die;"
Died at -e line 1.
>echo %errorlevel%
1

我认为perl可能会在其他情况下退出1(例如加载perl本身的问题),但我不知道任何此类情况。

答案 1 :(得分:1)

要注意的事项,您必须立即询问%ERRORLEVEL%。批处理脚本中的每一步都会设置或弄乱错误级别,因此如果您希望它保持不变,则不会。例如,如果你运行一个脚本,然后运行另一个命令(dir,或echo等),然后检查errolevel,它将用于脚本之后的命令,而不是脚本本身。