【问题标题】:/usr/local/bin/perl5: bad interpreter: Permission denied/usr/local/bin/perl5:错误的解释器:权限被拒绝
【发布时间】:2014-07-24 20:04:17
【问题描述】:

我有一个 unix 命令 (脚本),其中有一个嵌套的 perl 脚本。 当我从命令行运行这个 unix 命令时,它工作正常。 如果我使用 exec 从 tcl 文件运行相同的命令,我会收到以下错误:

'sh: /cmdpath/cmd.pl: /usr/local/bin/perl5: bad interpreter: Permission denied'

任何想法可能导致这种情况。我的 tcl 代码试图多次执行这个命令(超过 100 次)。

谢谢 汝驰

【问题讨论】:

  • 如果您告诉我们调用 Perl 脚本的代码行的内容,您将获得更多有用的帮助……

标签: perl unix tcl


【解决方案1】:

几乎可以肯定,您的 Perl 脚本是以 DOS/Windows 行结束格式编码的,它使用\r\n 来终止行。由于 Unix 仅以 \n 结束行,\r 被解释为属于可执行名称,因此内核尝试运行名为 perl5\r 的程序并失败。

删除此行末尾的\r 应该可以解决问题。

另外,perl5 可执行文件可能在给定路径中不存在,或者存在但缺少执行权限位。如果您在文件系统的其他位置有此可执行文件,请更新脚本第一行的路径以指向它。要解决后一个问题,请运行

chmod +x /usr/local/bin/perl5

您需要成为 root 才能执行此操作。

【讨论】:

    【解决方案2】:

    鉴于您显示的输出,您可能正在执行“sh cmd.pl”。反过来, sh 正在尝试执行 perl 解释器。 为什么不直接生成“/usr/local/bin/perl5 cmd.pl”,这样会更有效率,尤其是如果你这样做了数百次。

    【讨论】:

    • 我正在运行内部调用 cmd.pl 的 unix 命令 sh cmd。同样在 cmd.pl 中,我将 perl 解释器称为 #!user/local/bin/perl5。如果我从提示符运行它运行良好,但如果从 tcl 运行相同的 sh cmd,它会给我错误,而且本质上太随机了
    • 如果将脚本第一行中的 #!/usr/local/bin/perl5 替换为 '#!/usr/bin/env perl5' 会怎样?
    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 2020-01-08
    • 1970-01-01
    相关资源
    最近更新 更多