2013-04-15 8 views
29

Tôi đang sử dụng hai phiên bản ROS bên cạnh nhau. Để sử dụng một trong những tôi phải nguồn một số biến môi trường cho phiên bản cụ thể. Tôi muốn tạo một kịch bản thực hiện điều này. Nhưng nếu tôi tạo ra một kịch bản như dưới đây các biến không được thiết lập, họ có thể được đặt trong một subshell. Làm thế nào tôi có thể nguồn các tập tin vào vỏ thiết bị đầu cuối chính?Tệp nguồn trong tập lệnh bash

source.sh:

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

Dưới đây là làm thế nào tôi đang kêu gọi source.sh:

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

Cập nhật: Bằng nguồn source.sh như đề xuất trong câu trả lời, tôi có thể bây giờ thấy các biến được thiết lập.

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

Điều gì về tìm nguồn cung ứng 'source.sh'? Điều này có thể giúp bạn: http://stackoverflow.com/a/15968190/1983854 – fedorqui

+0

Cảm ơn bạn đã làm việc! – user408041

Trả lời

53

Execute Shell Script Sử dụng. ./ (dấu cách chấm dấu chấm)

Trong khi thực thi kịch bản lệnh shell sử dụng “dot space dot slash”, như được hiển thị bên dưới, nó sẽ thực thi tập lệnh trong trình bao hiện tại mà không cần kích hoạt vỏ phụ.

$ . ./setup.bash 

Nói cách khác, điều này sẽ thực hiện các lệnh được chỉ định trong vỏ setup.bash trong vỏ hiện tại và chuẩn bị môi trường cho bạn.

4

Sử dụng ký hiệu dấu chấm để nguồn trong file kịch bản trong hiện vỏ ví dụ mà không cần tạo một tiểu vỏ:

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

Nếu tôi sử dụng ./source.sh nó không hoạt động. source.sh không hoạt động! – user408041

+0

SInce bạn đang cung cấp đường dẫn đầy đủ để setup.sh ở đây do đó '. /' Là không cần thiết vì '. /' Có nghĩa là dir hiện tại. – anubhava

+0

"'./Source.sh' "thực thi tập lệnh (trong trình bao riêng của nó). "'../source.sh' "(hoặc" 'source./source.sh'", hoặc "' source source.sh' ") sẽ áp dụng nội dung kịch bản cho môi trường shell hiện tại. – clusterdude