2012-03-09 49 views
0

我創建了一個bash shell腳本文件,可以在本地bash(版本4.2.10)上運行,但不能在遠程計算機上運行(版本3.2)。下面是我在做什麼Bash是否有阻止我執行文件的版本問題?

  • 腳本文件(some_script.sh)存在於本地文件夾
  • 我已經做了$ chmod 755 some_script.sh使其可執行
  • 現在,我嘗試$ ./some_script.sh

在我的電腦上,這運行良好。在遠程計算機上,這會返回命令未找到錯誤: ./some_script.sh: Command not found.

此外,在遠程版本中,可執行文件的名稱後面帶有星號(*)。不知道這是否會產生任何影響,但當我包含明星時,我仍然會得到同樣的錯誤。

這是因爲bash shell版本嗎?任何想法,使其工作?

謝謝!

+1

檢查腳本頂部的[「shebang」](http://en.wikipedia.org/wiki/Shebang_(Unix))行。 「bash」的位置是否與其他系統上的相同? – 2012-03-09 07:26:19

+0

完整性檢查,是您試圖運行它的遠程文件系統上的腳本? – Alex 2012-03-09 07:30:15

+0

這個錯誤應該沒有關係。因爲它甚至沒有讀取文件。然而,我確實把bash的參考放在了錯誤的地方...... – Nathan 2012-03-09 07:34:17

回答

3

command not found消息可能有點誤導。問題中的「命令」可以是您嘗試執行的腳本在shebang行上指定的shell。

例如,我的系統上:

% cat foo.sh 
#!/no/such/dir/sh 

echo hello 
% ./foo.sh 
./foo.sh: Command not found. 

./foo.sh明顯存在;這是不存在的解釋器/no/such/dir/sh。 (我發現錯誤信息取決於你調用的外殼foo.sh。)

所以這個問題幾乎肯定是你在some_script.sh的第一行指定了一個不正確的解釋器名字。也許bash安裝在不同的位置(這通常是/bin/bash,但並非總是如此。)

至於在可執行文件名稱的*字符,這些實際上不是文件名的一部分。 ls命令的-F選項使其在某些類型的文件之後顯示特殊字符:可執行文件爲*,目錄爲/,符號鏈接爲@等等。可能在遠程系統上,您有ls別名爲ls -F或類似的東西。如果您鍵入/bin/ls,繞過別名,您應該看到沒有附加*字符的文件名;如果輸入/bin/ls -F,則應該再次看到*

在命令名中添加一個*字符不會做你認爲正在做的事情,但它可能可能不會有任何區別。例如,如果您鍵入

./some_script.sh* 

*是一個外卡,和命令名擴展到當前目錄中名稱匹配模式的所有文件的列表(這是從*意義完全不同作爲ls -F輸出中的可執行文件)。機會只有一個這樣的文件,所以 ./some_script.sh*可能相當於./some_script.sh。但是不要輸入*;這是不必要的,並可能導致意想不到的結果

+0

還要確保您的平臺使用了正確的行尾。 dos2unix是一個有用的工具。 – 2012-03-09 14:39:25

+0

謝謝基思。我很高興你教過我所有這些東西。這是非常豐富的! – Nathan 2012-03-09 16:51:22