我编写了一个 shell 脚本,将$PATH
变量设置为一个包含 shell 和 Perl 脚本的目录。
我可以在当前工作目录设置为任何随机目录的情况下运行 shell 脚本,但 Perl 脚本不同。
运行这两者有什么区别吗?
抛出的错误是
Can't open perl script "script.pl" : No such file or directory
尽管该文件与 shell 脚本存在于同一个文件夹中。
当您将脚本作为“perl script.pl”运行时,系统将使用路径环境来定位 perl 解释器,而不是您的脚本。脚本名称作为 arg 传递给解释器。如果脚本不在 cwd 中,则需要包含其路径。
仅运行“脚本”显示权限被拒绝,运行“script.pl”显示找不到命令。
这告诉我两件事。1) 脚本的名称不包括 .pl 分机和 2) 在不带分机的情况下调用时,它确实会在路径中找到脚本,但它的权限设置不正确,您无法执行它。
正如其他人所说,您需要分配正确的权限以允许您执行脚本。
您可能需要检查一些事项:
chmod +x script.pl
:)#!/usr/bin/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.
抛出的错误是
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!
如果我运行 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!