2014-04-23 162 views
1

我有perl脚本,当我尝试运行这个脚本时没有执行权限(只有rw)“./script.pl”我得到“权限被拒绝”,这对我来说很明显。但是当我使用“perl -e script.pl”来运行这个脚本时,它的工作原理和脚本是通过它自己的许可执行的。脚本执行脚本不执行权限

有人可以解释这种奇怪的行为吗?

+0

奇怪的是,如果它以任何其他方式表现出来。 – mob

回答

2

当您运行命令

perl的script.pl

Perl可执行文件是从shell执行(使用一些exec()系统调用)。/usr/bin/perl文件需要+ x,因为每个使用exec()执行的文件都需要这个文件。 Perl将使用参数script.pl运行,并且perl被编程为打开一个文件,该文件在命令行上被提供给它并处理内容。

当你运行该文件以这种方式

./script.pl

shell将script.pl直接使用一些高管的运行文件()系统调用和那么script.pl是需要+ x的文件。

换句话说,如果你想运行像./script.pl的文件,你需要

使用chmod + X script.pl

你还需要一个“家当“作为脚本的第一行,告诉你想用哪个命令来运行它。它看起来是这样的:

#!/usr/bin/perl 
+0

嗨安德斯,感谢您的回复,但我仍然不明白的东西。我做了类似的情况。我创建了具有执行脚本test2(不含x)的执行权限的脚本test1。这次脚本test2没有被执行。 test @ note〜/ Desktop $ ls -l test * -rwxr - r-- 1 test test 20 kwi 23 22:40 test1 -rw-r - r-- 1 test test 26 kwi 23 22:41 test2 test @ note〜/ Desktop $ ./test1 ./test1:line 3:./test2:权限被拒绝 – user3461823

+0

如果您运行test2类似./test2,则无论您是否从test2运行test2,都需要+ x。命令行或从其他脚本。 shell实际上并没有区别(我认为test1是一个shell脚本)。 –

+0

对不起,格式化。上面的脚本是bash。 – user3461823

2

在您尝试执行脚本的第一种情况下。

在第二种情况下(如果我们忽略-e),您试图执行perl,并告诉它运行script.pl文件中的代码。

(该-e导致它尝试运行文字文本script.pl如Perl代码)