【问题标题】:Not able to call a perl script from a shell script无法从 shell 脚本调用 perl 脚本
【发布时间】:2011-04-01 14:50:07
【问题描述】:

我正在尝试从 shell 脚本调用 perl 脚本,代码如下所示...

shell脚本test_sh

#Call the script
test2.pl ${PARTITION_ID} ${VNG_USER} ${VNG_PASSWORD} ${VNG_INSTANCE}
if [ $? -ne 0 ]
  then
    OP1ExitStatus -6
fi

执行时收到以下错误消息:

./test_sh[142]: test2.pl:  not found
Failed in test_sh

两个文件的权限都是 755。

但是当 i 并通过传递所有参数直接从命令行调用 test2.pl 时,它会成功运行。 我也尝试了以下命令:

#Call the script
perl test2.pl ${PARTITION_ID} ${VNG_USER} ${VNG_PASSWORD} ${VNG_INSTANCE}
if [ $? -ne 0 ]
  then
    OP1ExitStatus -6
fi

但它也不起作用。 请让我知道如何继续以成功运行它。

【问题讨论】:

  • 那么第二个“不工作”怎么办?有任何错误信息吗?

标签: perl


【解决方案1】:

从命令行直接调用perl test2.pl。从脚本中,您假设 (1) test2.pl 是可执行的,并且 (2) .$PATH 某处。我会在脚本中直接使用perl 调用,至少现在是这样。

【讨论】:

  • 或者:./test2.pl 如果脚本有 shebang 并且已被 chmod +xed。
  • @Benôit:确实,虽然我通常只对没有扩展的脚本执行此操作,但考虑到扩展表明它应该直接提供给适当的解释器。
【解决方案2】:

检查你的shebang,例如#!/bin/bash。您可能还想尝试使用 Perl 可执行文件的完整路径。

【讨论】:

    【解决方案3】:

    这通常意味着 Perl 脚本顶部 shebang 行中perl 的路径是错误的(假设该文件对您具有执行权限)。

    尝试使用:

    #!/usr/bin/env perl
    

    【讨论】:

      【解决方案4】:

      您的 shell 脚本无法找到您的 test2.pl。你需要在你的 shell 脚本中给出 test2.pl 的完整路径,或者确保它在你的 $PATH 中。

      【讨论】: