Linux

使用 ./script.sh 執行腳本失敗,而“sh script.sh”工作

  • February 13, 2012

我對這個錯誤感到非常困惑,甚至不知道該Google搜尋什麼:

失敗- 執行腳本:

./test.sh 
bash: ./test.sh: "Permission denied" 

有效- 雖然這些方法有效:

sh ./test.sh
Works
bash ./test.sh
Works

測試腳本:

cat test.sh 
#!/bin/bash

echo "Works"

擁有所有執行權限:

chmod 777 test.sh

ls -als test.sh 
4 -rwxrwxrwx 1 edo edo 27 13. Feb 10:41 test.sh

我對為什麼會發生這種情況一無所知,因為這對我來說沒有任何意義,而且我不知道Google用什麼詞來正確描述這種行為..

根據 shebang 行執行腳本與將其作為參數傳遞給 shell 完全不同。

在前一種情況下,文件必須駐留在可執行分區上,並且必須包含對現有 shell 的有效 shebang 行。

在後一種情況下,這些都不是必需的,因為您呼叫腳本的 shell 負責這些事情。

請注意,您也沒有在這些測試中使用相同的 shell:第一個推斷 bash,而第二個使用 sh。

我的猜測是您的腳本所在的分區不允許執行;mount -v會告訴你是否是這種情況。

引用自:https://serverfault.com/questions/359504