Linux下,同一個指令碼使用bash 和sh 啟動,表現不同,sh 啟動失敗
阿新 • • 發佈:2018-11-08
Linux下,同一個指令碼使用bash 和sh 啟動,表現不同,sh 啟動失敗
指令碼內容
source setup.bash
source /opt/ros/kinetic/setup.bash
roslaunch hello hello.launch
現象
- sh start.sh 失敗
- bash start.sh成功
原因
- sh 是bash 的一個軟連線, 但sh 不是完全等同於bash ,其相當於 bash -posix
- 關於bash 的 posix模式在man bash中有相關的描述:When bash is not in posix mode, the current directory is searched if no file is found in PATH.
即:如果bash不是執行在posix模式下,當檔名作為source的引數,系統會先從PATH中查詢,如果在PATH中,也就是系統變數中找不到這個檔案時會在當前目錄下查詢這個檔案。所以在不使用posix模式的情況下 start.sh指令碼中的source setup.sh不會出錯,因為即使在PATH中找不到,也會在當前目錄中進行查詢。
- .也就是source這種內建命令在使用檔名作為引數時,如果在PATH中無法找到,將不會在當前目錄自動進行查詢
所以使用sh時,source 命令便會提示找不到檔案