/usr/local/bin/perl5:错误的解释器:权限被拒绝

/usr/local/bin/perl5:错误的解释器:权限被拒绝,perl,unix,tcl,Perl,Unix,Tcl,我有一个unix命令 (脚本)其中包含嵌套的perl脚本。 当我从命令行运行这个unix命令时,它工作得很好。 如果使用exec从tcl文件运行相同的命令,则会出现以下错误: 'sh: /cmdpath/cmd.pl: /usr/local/bin/perl5: bad interpreter: Permission denied' 你知道是什么引起的吗。我的tcl代码多次尝试执行此命令(超过100次) 谢谢 Ruchi几乎可以肯定,您的Perl脚本是以DOS/Windows行结束格式编码的,

我有一个unix命令 (脚本)其中包含嵌套的perl脚本。 当我从命令行运行这个unix命令时,它工作得很好。 如果使用exec从tcl文件运行相同的命令,则会出现以下错误:

'sh: /cmdpath/cmd.pl: /usr/local/bin/perl5: bad interpreter: Permission denied'
你知道是什么引起的吗。我的tcl代码多次尝试执行此命令(超过100次)

谢谢
Ruchi

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

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

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

chmod +x /usr/local/bin/perl5

您需要是root用户才能执行此操作。

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

我正在运行unix命令sh cmd,它在内部调用cmd.pl。同样在cmd.pl中,我将perl解释器称为#!用户/本地/bin/perl5。如果我从提示符运行,它工作得很好,但是如果从tcl运行同一个sh cmd,它会给我错误,这太随机了,如果你替换#/usr/local/bin/perl5在脚本的第一行(假设您有它)中加上“#”/usr/bin/env perl5“如果您告诉我们调用Perl脚本的代码行说了什么,您将得到更多有用的帮助…