2013-04-15 62 views
29

我使用兩個彼此相鄰的ROS版本。要使用一個,我必須爲特定版本提供一些環境變量。我想創建一個腳本來做到這一點。 但是,如果我創建一個如下所示的腳本,則變量未設置,它們可能設置在一個子shell中。我怎樣才能將文件發送到主終端外殼?bash腳本中的源文件

source.sh:

source /opt/ros/fuerte/setup.bash; 
source ~/fuerte_workspace/setup.bash; 

下面是我打電話source.sh:

./source.sh 
# This does not echo anything, but I expect it should 
echo $ros_config 

更新:按照與答案的建議,我可以採購source.sh現在看到正在設置的變量。

source ./source.sh 
# This works now 
echo $ros_config 
+2

如何採購'source.sh'?這可以幫助你:http://stackoverflow.com/a/15968190/1983854 – fedorqui

+0

謝謝你的工作! – user408041

回答

53

執行Shell腳本使用。 ./(點空格點斜槓)

使用「dot space dot slash」執行shell腳本時,如下所示,它將在當前shell中執行腳本而不分支子shell。

$ . ./setup.bash 

換句話說,這個執行當前shell的setup.bash指定的命令,並準備環境,爲您。

4

使用點符號在腳本文件源在當前外殼即,而無需創建一個子shell

. /opt/ros/fuerte/setup.bash 
. ~/fuerte_workspace/setup.bash 
+0

如果我使用./source.sh它不起作用。 source source.sh確實可行! – user408041

+0

即使你提供了setup.sh的完整路徑,因此'。/'是不需要的,因爲'。/'表示當前的目錄。 – anubhava

+0

「'。/ source.sh'」執行腳本(在它自己的shell中)。 「'。/ source.sh'」(或「source./ source.sh'」或「source source.sh'」)將把腳本內容應用到當前shell環境。 – clusterdude