-2

我编写了一个 shell 脚本,将$PATH变量设置为一个包含 shell 和 Perl 脚本的目录。

我可以在当前工作目录设置为任何随机目录的情况下运行 shell 脚本,但 Perl 脚本不同。

运行这两者有什么区别吗?

抛出的错误是

Can't open perl script "script.pl" : No such file or directory

尽管该文件与 shell 脚本存在于同一个文件夹中。

4

4 回答 4

0

当您将脚本作为“perl script.pl”运行时,系统将使用路径环境来定位 perl 解释器,而不是您的脚本。脚本名称作为 arg 传递给解释器。如果脚本不在 cwd 中,则需要包含其路径。

仅运行“脚本”显示权限被拒绝,运行“script.pl”显示找不到命令。

这告诉我两件事。1) 脚本的名称不包括 .pl 分机和 2) 在不带分机的情况下调用时,它确实会在路径中找到脚本,但它的权限设置不正确,您无法执行它。

正如其他人所说,您需要分配正确的权限以允许您执行脚本。

于 2015-04-22T16:34:54.237 回答
0

您可能需要检查一些事项:

  1. 执行权限(即chmod +x script.pl:)
  2. perl 脚本#!/usr/bin/perl的第一行。
  3. 当您尝试启动 perl 脚本时,您是否输入了文件的全名,包括任何扩展名?(即:script.pl而不是script)我通常不为我保存在目录中的脚本使用扩展名$PATH以使事情变得更容易。

如果您向我们展示您正在输入的内容或错误,这将非常有帮助。

编辑:您可以检查的另一件事是脚本的所有权。我刚刚以 root 身份制作了一个脚本,它抛出了一些错误,比如您遇到的问题。

[root@computer perms-test]# chmod 744 perms.pl  # As Root, give permissions
[root@computer perms-test]# ll
-rwxr--r-- 1 root root 96 Apr 22 17:41 perms.pl
[root@computer perms-test]# exit
exit
[user@computer:perms-test]ll
-rwxr--r-- 1 root root 96 Apr 22 17:41 perms.pl
[user@computer:perms-test]./perms.pl        # User can't run script
bash: ./perms.pl: Permission denied
[user@computer:perms-test]echo 'PATH=/home/user/perms-test:$PATH' >> ~/.bashrc
[user@computer:perms-test]. ~/.bashrc       # Reinitialise .bashrc
[user@computer:perms-test]mkdir random-dir
[user@computer:perms-test]cd random-dir/
[user@computer:random-dir]perms.pl
bash: /home/user/perms-test/perms.pl: Permission denied
[user@computer:random-dir]perl perms.pl # In a different dir, can't find script
Can't open perl script "perms.pl": No such file or directory
[user@computer:random-dir]cd ..
[user@computer:perms-test]perl perms.pl 
the script allowed you to run it.
于 2015-04-22T13:34:21.097 回答
0

抛出的错误是
Can't open perl script "script.pl" : No such file or directory

这是您所做的模拟:

$ export PATH=/bin:/usr/bin:$HOME/bin

$ cat >$HOME/bin/script.pl
#!/usr/bin/perl
print "Hello, world!\n";
^D

$ chmod u+x $HOME/bin/script.pl

$ perl script.pl
Can't open perl script "script.pl": No such file or directory

那是错误的。路径已搜索,但已搜索perl. 这是你应该使用的:

$ script.pl
Hello, world!
于 2015-04-22T18:57:01.093 回答
0

如果我运行 script.pl,它会说找不到命令。

就像使用 shell 脚本一样,您需要使 Perl 脚本可执行 ( chmod u+x script.pl),并且它需要有一个 shebang ( #!/usr/bin/perl)。

$ export PATH=/bin:/usr/bin:$HOME/bin

$ cat >$HOME/bin/script.pl
#!/usr/bin/perl
print "Hello, world!\n";
^D

$ chmod u+x $HOME/bin/script.pl

$ script.pl
Hello, world!
于 2015-04-22T13:30:14.443 回答