今天學習了shell script,發現一個困惑的問題,樹上說bash xxx.sh命令與sh xxx.sh的執行效果應該是一樣的,但我照搬正確的程序運行,root身份下,發現bash xxx.sh或./xxx.sh能執行通過,但sh xxx.sh就是提示莫名奇妙的語法錯誤,一會兒declare錯誤,但語法肯定沒錯,奇怪了。感覺是權限問題。是否sh命令處于不同的shell,連權限都改了?我是ubuntu系統。問大牛如何修改。
2 回答

躍然一笑
TA貢獻1826條經驗 獲得超6個贊
在ubuntu中,sh只是bash的一個鏈接,執行的程序都是一樣的,命令解釋器是一樣的。
但
bash xxx.sh和
./xxx.sh和
sh xxx.sh
還是有不同的,bash xxx.sh和sh xxx.sh都已經是直接執行命令,腳本程序作為這個命令的參數,不存在可行性權限的問題,而./xxx.sh則必須具有可執行權限,在部分自動化的腳本中出現像./xxx.sh這個的語句可能會出錯。
然后,三條命令本身的語句不一樣,部分腳本程序在執行時喜歡檢測一下命令名本身([ "$0"]),對不同的命令會作出不同的反應,這個是取決與腳本本身的。
我沒看過樓主的腳本,猜測,可能在xxx.sh這個腳本中有一條語句對命令名進行檢測,然后進行條件跳轉。
if [ "$0" = "sh xxx.sh" ]
then
......
fi

精慕HU
TA貢獻1845條經驗 獲得超8個贊
.是表示在當前shell中執行腳本。所以會在當前的shell界面看到提示。
#!/usr/bin/bash 則是另開了一個shell執行腳本,所以看不到提示。
至于另開腳本是否會覆蓋還沒有測試過。
但是考慮可能會覆蓋的情況 ,因該編寫一個if 【】進行文件是否存在的測試。如果文件存在,進行判斷是跳過還是覆蓋。
否則文件不存在,則直接復制。
添加回答
舉報
0/150
提交
取消