$PATH
シェルと Perl スクリプトを含むディレクトリに変数を設定するシェル スクリプトを作成しました。
現在の作業ディレクトリを任意のディレクトリに設定してシェル スクリプトを実行できますが、Perl スクリプトは異なります。
2つの実行に違いはありますか?
スローされるエラーは
Can't open perl script "script.pl" : No such file or directory
ファイルはシェルスクリプトとまったく同じフォルダーに存在しますが。
script.pl を実行すると、command not found と表示されます。
シェル スクリプトと同様に、Perl スクリプトを実行可能chmod u+x script.pl
にする必要があり ( )、それにはシバン ( #!/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!
スローされるエラーは
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!
スクリプトを「perl script.pl」として実行すると、システムはパス環境を使用して perl インタープリターを見つけますが、スクリプトは見つけません。スクリプト名は、引数としてインタープリターに渡されます。スクリプトが cwd にない場合は、そのパスを含める必要があります。
「スクリプト」を実行するだけでアクセス許可が拒否され、「script.pl」を実行するとコマンドが見つからないことが表示されます。
それは私に2つのことを教えてくれます。1) スクリプトの名前に .pl ext が含まれておらず、2) ext なしで呼び出された場合、スクリプトはパス内で検出されますが、スクリプトを実行するための権限が正しく設定されていません。
他の人が述べているように、スクリプトを実行できるようにするには、適切な権限を割り当てる必要があります。
いくつかの点を確認する必要があります。
chmod +x script.pl
)#!/usr/bin/perl
最初の行にある.script.pl
and not script
) 私は通常、作業を$PATH
簡単にするために、ディレクトリに保持するスクリプトに拡張機能を使用しません。入力内容やエラーを教えていただけると助かります。
編集:確認できるもう1つのことは、スクリプトの所有権です。ルートとしてスクリプトを作成したところ、発生しているようなエラーが発生しました。
[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.