【问题标题】:Status of perl scripts run from bash scripts从 bash 脚本运行的 perl 脚本的状态
【发布时间】:2013-07-16 21:06:07
【问题描述】:

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

【问题讨论】:

    标签: linux perl bash shell


    【解决方案1】:

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

    #!/usr/bin/env perl
    exit(0); # or just exit
    

    运行:

    ./test.pl && echo "OK" || echo $?
    OK
    

    拥有

    #!/usr/bin/env perl
    exit(123);
    

    运行:

    ./test.pl && echo "OK" || echo $?
    123
    

    拥有

    #!/usr/bin/env perl
    die;
    

    运行:

    ./test.pl && echo "OK" || echo $?
    Died at ./test.pl line 2.
    255
    

    所以:

    • 从 perl 脚本中退出时使用 0(或没有)将是 true 在 shell 中。
    • 从 perl 脚本中以非 0 的(字节)值退出将在 shell 中为 false$? 将为您提供退出值。
    • 使用 die 从 perl 脚本中退出将是 shell 中的 false$? 将是 255(在我的情况下 - 我检查过)。

    【讨论】:

    • 值得注意的是,使用die 终止Perl 程序会导致错误代码-1。不需要明确的exit
    • 为了清楚起见,0 以外的值 仍然必须适合一个字节。 (以防万一还不清楚,perl 中的die(); 将导致退出状态为 255。)
    • 你们俩都是对的。我会将此添加到答案中。谢谢 - 但是,bash(就我而言)给了我 255 而不是 -1。
    • ./test.pl && echo "OK" || echo $? echo $? 在失败时是 >0 但为什么在成功时打印 OK
    • 我相信shell的退出状态使用了一个无符号字符,所以-1 == 255
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 2010-09-26
    相关资源
    最近更新 更多