2011-11-16 2 views
4

이외의 범위를 가지고 쉘 스크립트 변수를 정의 않습니다.어떻게 내가 우분투 단정을 사용하고 스크립트

나는 /etc/init.d/qstart에 저장 한 쉘 스크립트가 있습니다. 쉘 스크립트에는 다음이 포함

apt-get -y update 
apt-get -y upgrade 
apt-get -y install tofrodos gcc make nmap lsof expect sysstat 
dbpass="mydbpassword" 

을 그러나, 나는이 스크립트를 실행 한 후, 나는 그 dbpass이 설정되어 검사 할 내가 프롬프트에서 echo $dbpass를 입력합니다. 그러나 그것은 비어 있습니다. 나는 그것을 외부에서 액세스 할 수 있도록

은 어떻게 쉘 스크립트에서 변수를 정의합니까?!

미리 감사드립니다.

+0

환경 변수는 무엇입니까? http://www.mcsr.olemiss.edu/unixhelp/environment/env3d.html – Jerome

+0

@jeromeG I이 작동하지 않습니다하지만 시도, 그것은 에코'그때'DBPASS = "mydbpassword"를했을 때 빈 '과 와서 $ DBPASS'입니다. –

+0

'init' 스크립트는 이것에 대한 장소가 아닙니다. 다른 패키지들에 의존하는 패키지를 만들어야하고'/ etc/environment' 또는 postinst 스크립트에서 비슷한 것을 업데이트해야합니다. – tripleee

답변

2

당신은 자식 프로세스의 부모 프로세스에 대한 환경 변수를 설정할 수 없습니다. 할 수있는 일은 실행하는 대신 source script.sh 또는 . script.sh입니다.이 경우에는 동일한 bash 프로세스에서 실행되고 모든 변경 사항이 보존됩니다.

또한 init 스크립트와 다른 곳에서 동일한 변수 세트를 사용하려는 경우 더 일반적인 경우 /etc/default/something에 넣을 수 있습니다. 그리고 마지막으로 source이 파일을 bashrc 또는 /etc/profile.d/something 파일에 넣을 수 있습니다.

7

당신은 부모 프로세스의 환경 변수를 설정할 수 없습니다. 현재 프로세스의 환경 만 설정하거나 프로세스의 하위 환경을 준비 할 수 있습니다.

즉, 새 셸을 포크하는 대신 현재 셸 프로세스의 스크립트에서 명령을 실행하도록 셸에 지시 할 수 있습니다. 당신은 이런 식으로 작업을 수행 할 수 있습니다

source your_script.sh 

또는

. your_script.sh 

은 (점 이후의 공간을 참고). 여기 your_script.sh 내부의 명령은 현재 쉘에 의해 실행되므로 스크립트 내의 환경에 대한 변경 사항은 유지됩니다.

그러나 스크립트를 실행하는 셸이 환경 변수를 사용하려는 셸의 조상이 아니면 환경 변수를 사용하여 목표를 달성 할 수있는 방법이 없습니다. 예를 들어, 스크립트가 임의의 자식없는 셸에 의해 초기화 될 때 모든 환경 설정이 완료되면 되돌릴 수 없게 영원히 사라집니다. 이 경우 파일과 같은 다른 메커니즘을 사용하십시오 (어쩌면 /var 아래).

주어진 쉘의 모든 인스턴스가 환경에서 설정된 특정 변수를 갖기를 원하면 대부분의 쉘에서 사용하는 초기화 스크립트를 사용할 수 있습니다. 대개 시스템 전체 및 사용자 별 초기화 스크립트가 있습니다. 예를 들어, bash는 대화식 로그인 셸에 대해 시스템 전체 초기화 스크립트로 /etc/profile을 사용하고 사용자 별 초기화 스크립트로 $HOME/.bash_profile (역시 $HOME/.bash_login$HOME/.profile)을 사용합니다. 배시 관련 세부 사항은 this reference을 참조하십시오. 다른 쉘을 사용하는 경우 해당 매뉴얼을 시도하십시오.

+0

확인.나는 단지 스크립트를 사용하여 전체 스크립트의 줄에있는 MySQL 설치용 암호를 정의하려고 시도했습니다. 나는 다른 길을 찾아야 할 것 같아. –

+0

호출하는 스크립트에 var를 설정하면 호출 된 스크립트가이를보아야합니다. 'export'를 사용했는지 확인하십시오. –

+0

부모 프로세스는 실제로 자식 환경을 설정할 수 있지만 init 스크립트는 사용자 로그인 쉘의 부모가 아닙니다. – tripleee

관련 문제