perl脚本的状态从bash脚本运行

Jim*_*Jim 2 linux bash shell perl

据我所知,我们可以$?用来获取我们执行的命令的结果,如果程序员保持约定,它将返回错误的非零结果和成功的0结果.
但是当我们运行perl脚本时呢?
我是perl中的新手,但我认为perl脚本1如果是模块的一部分则会返回,否则它们不会返回任何内容.
那我怎么知道我运行的perl脚本发生了什么?

Kar*_* S. 7

从shell运行时,Perl脚本的行为相同.拥有test.pl:

#!/usr/bin/env perl
exit(0); # or just exit
Run Code Online (Sandbox Code Playgroud)

运行:

./test.pl && echo "OK" || echo $?
OK
Run Code Online (Sandbox Code Playgroud)

#!/usr/bin/env perl
exit(123);
Run Code Online (Sandbox Code Playgroud)

运行:

./test.pl && echo "OK" || echo $?
123
Run Code Online (Sandbox Code Playgroud)

#!/usr/bin/env perl
die;
Run Code Online (Sandbox Code Playgroud)

运行:

./test.pl && echo "OK" || echo $?
Died at ./test.pl line 2.
255
Run Code Online (Sandbox Code Playgroud)

所以:

  • 从perl脚本退出0(或没有)将true在shell中.
  • 退出perl脚本的(字节)值不是0将false在shell中,$?并为您提供退出值.
  • 退出perl脚本diefalse在shell中,$?将是255(在我的情况下 - 我检查了它).

  • 为清楚起见,*0*以外的值仍必须符合一个字节.(并且万一它仍然不清楚,`die();`in perl将导致退出状态为255.) (2认同)