2014-12-01 2 views
1

기능에는 관련이 없지만 동일한 프로젝트 내에서 작동한다는 점에서 관련된 Bash 및 Perl 스크립트가 많이 있습니다. 동일한 프로젝트에서 작동한다는 사실은 내가 일반적으로 동일한 디렉토리, 동일한 프로젝트 특정 명령, 모든 스크립트의 맨 위에 동일한 키워드를 지정한다는 것을 의미합니다.여러 스크립트에 공통 변수 정의?

현재이 문제는 나를 괴롭 히지는 못했지만 한 곳에서 모든 값을 가져 오는 것이 더 쉽다는 것을 알고 있습니다. 그런 다음 무언가가 변경되면 값을 한 번 변경하고 다양한 스크립트를 적용 할 수 있습니다 .

질문은 -이 값을 선언하는 가장 좋은 방법은 무엇입니까? 각 스크립트에서 '필수'인 단일 Perl 스크립트는 Bash 스크립트에 대한 솔루션을 제공하지는 않지만 Perl 스크립트에 대한 변경이 더 적습니다. "key = value"형식을 사용하는 구성 파일은보다 보편적이지만 구성을 구문 분석 할 때 각 스크립트가 필요하며 문제를 일으킬 가능성이 있습니다. 더 나은 대안이 있습니까? 환경 변수 사용? Perl이 쉽게 실행하고 해석 할 수있는 Bash 특정 방법?

+3

'key = value' 형식은 네이티브 sh이며'.' 명령으로 사용할 수 있습니다. perl로 쉽게 파싱 할 수 있습니다. –

+0

잘 했어, 아주 사실! 나는 지금 가장 어리 석다. – forquare

+2

'export' 명령을 사용하여 글로벌 환경 변수를 생성 할 수도 있습니다. 예 :'export FOO = 2'. – iqstatic

답변

3

셸 스크립트를 실행하면 하위 셸에서 수행되므로 상위 셸 환경에 영향을주지 않습니다. 따라서 변수를 key=value으로 선언하면 그 범위는 하위 셸 컨텍스트로 제한됩니다.

이렇게하면 하위 쉘이 아닌 현재 쉘의 컨텍스트에서 실행됩니다. bash는 남자 페이지에서

:
. filename [arguments] 
source filename [arguments] 

Read and execute commands from filename in the current shell environment and return the exit status of the last command executed from filename. 

If filename does not contain a slash, file names in PATH are used to find the directory containing filename. 

또한 당신은 지구 환경 변수를 만들 수 export 명령을 사용할 수 있습니다. export 변수가 새로운 프로세스를 사용할 수있는 지배, 그래서 당신은
FOO=1 
export BAR=2 
./myscript2.sh 

을 말한다면 다음 $BAR는 myscript2.sh의 환경에서 사용할 수 있지만 $FOO은하지 않습니다.

+0

이것은 필자가 찍은 경로이며, Perl에서는'% CONFIG = read_file ("path/to/config") = ~ /^(.+)=(.*)$/mg를 사용합니다. ; '변수를 구문 분석하고 사용하기 위해서. – forquare

2

환경 변수를 정의합니다 사용자 수준을 : 당신의 ~/.profile에 또는 ~/.bash_profile에 또는 ~/.bash_login이이나 ~/.bashrc에 시스템 레벨 :은/etc/프로필 또는 /etc/bash.bashrc 또는 의/etc/견인 라인을 foreach는 변수 추가 예를 들어 환경

:

#! /bin/bash 

echo $FOO 

:

FOO=myvalue 
export FOO 

bash는 스크립트에서이 변수를 읽으려면을 펄 스크립트에서 :

+0

이것이 효과적 일지 모르지만, 환경 변수의 수를 줄이는 것이 좋다고 생각합니다. 확실히 다른 프로세스로는 쉽게 변경할 수 없습니다. – forquare