2013-08-14 2 views
2

.sh (start_sim.sh)과 .bash (sim_sources.bash) 파일이 있습니다. sim_sources.bash 파일은 start_sim.sh에서 호출되며 환경 변수 $ROBOT을 특정 값으로 설정해야합니다. 그러나 ./start_sim.sh으로 전화하면 ROBOT 변수가 변하지 않습니다. 이 일을하는 데 근본적인 실수가 있습니까?Linux 소스가 .sh 파일에서 작동하지 않습니까?

start_sim.sh에는 다음이 포함

#!/bin/bash 

echo -n "sourcing sim_sources.bash..." 
source /home/.../sim_sources.bash 
echo "done." 

sim_sources.bash 다음이 포함

# set the robot id 
export ROBOT=robot 

편집 : 당신은 또한이 문제를 해결하는 방법을 제안 할 수 있을까요? .bash 파일에서 변수를 설정해야합니다.

EDIT2 : 답장을 보내 주셔서 감사합니다. 마지막으로 나는 그것을 화면과 소 명령으로 해결 결국 :

echo -n "starting screen..." 
screen -dmS "sim_screen" 
sleep 2 
screen -S "sim_screen" -p 0 -X stuff "source /home/.../sim_sources.bash$(printf \\r)" 
sleep 5 
screen -S "sim_screen" -p 0 -X stuff "source /home/.../start_sim.sh$(printf \\r)" 

답변

3

브라이언은 스크립트 외부에서 변수를 사용할 수 없다고 지적했습니다. 여기

이 점을 보여주는 적응 스크립트

#!/bin/bash 

echo -n "sourcing sim_sources.bash..." 
. sim_sources.bash 
echo $ROBOT 
echo "done." 

당신이 요구하는 해결 방법은 이미 설정된 환경 값으로 실제 쉘에서 새로운 쉘을 시작하는 것입니다 :

#!/bin/bash 

echo -n "sourcing sim_sources.bash..." 
. sim_sources.bash 
echo "done." 
bash 

결과는 다음과 같습니다.

bash-4.1$ printenv | grep ROBOT 
ROBOT=robot 
6

당신은 start_sim.sh script에서 ROBOT 변수 을 설정하는,하지만하지 부모 프로세스에 사용할 수 (당신의 산란 쉘/입니다 명령 프롬프트).

변수 내보내기 예 : export ROBOT=robot은 변수를 현재 프로세스 및 하위 프로세스에서 사용할 수 있도록합니다. ./start_sim.sh을 호출하면 새 프로세스가 호출됩니다.

쉘에 간단히 source start_sim.sh 인 경우 해당 스크립트는 쉘 프로세스의 일부로 실행되고 변수를 사용할 수 있습니다.

+0

힌트를 보내 주셔서 감사합니다. 그러나이 문제를 해결할 수있는 방법이 있습니까? 스크립트 내에서 변수를 설정해야합니다. (실제로는 .bash 파일에서 설정해야하는 많은 변수가 있지만, 지금까지는 .bashrc 내에서 소스가 호출되었습니다.) – Marc

관련 문제