我有perl腳本,當我嘗試運行這個腳本時沒有執行權限(只有rw)「./script.pl」我得到「權限被拒絕」,這對我來說很明顯。但是當我使用「perl -e script.pl」來運行這個腳本時,它的工作原理和腳本是通過它自己的許可執行的。腳本執行腳本不執行權限
有人可以解釋這種奇怪的行爲嗎?
我有perl腳本,當我嘗試運行這個腳本時沒有執行權限(只有rw)「./script.pl」我得到「權限被拒絕」,這對我來說很明顯。但是當我使用「perl -e script.pl」來運行這個腳本時,它的工作原理和腳本是通過它自己的許可執行的。腳本執行腳本不執行權限
有人可以解釋這種奇怪的行爲嗎?
當您運行命令
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
嗨安德斯,感謝您的回覆,但我仍然不明白的東西。我做了類似的情況。我創建了具有執行腳本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
如果您運行test2類似./test2,則無論您是否從test2運行test2,都需要+ x。命令行或從其他腳本。 shell實際上並沒有區別(我認爲test1是一個shell腳本)。 –
對不起,格式化。上面的腳本是bash。 – user3461823
在您嘗試執行腳本的第一種情況下。
在第二種情況下(如果我們忽略-e
),您試圖執行perl,並告訴它運行script.pl文件中的代碼。
(該-e
導致它嘗試運行文字文本script.pl
如Perl代碼)
奇怪的是,如果它以任何其他方式表現出來。 – mob