스크립트 기간 동안 만 환경 변수를 설정하는 방법은 무엇입니까?


127

bash의 Linux (Ubuntu 11.04)에서 스크립트 기간 동안 일반 변수와 만 다른 환경 변수를 임시로 설정할 수 있습니까? 예를 들어, 쉘 스크립트에서 일시적으로 HOME을 현재 작업 디렉토리의 폴더로 설정 한 다음 앱을 실행하여 HOME에 저장되는 앱을 이식 가능하게 만듭니다.


5
스크립트의 지속 시간을 초과 하여 설정을 유지하려면 더 어려울 것입니다
Nemo

답변:


119
VAR1=value1 VAR2=value2 myScript args ...

2
나는 이것을 실행하기 위해 여러 번 수행했습니다 vblank_mode=0 glxgears. 작동하지만 vblank_mode=0: command not found실행 후 도 표시 되지만 prepending으로 env인해 발생하지 않습니다. [테스트 중 ...] 분명히 zsh는 그것을 좋아하지 않지만 (아직 올바르게 사용하고 있습니다) bash는 괜찮습니다. env이제부터는 그 방법으로 갈 것 같아요 .
Chinoto Vokro

2
스크립트로 작동하지만 VAR1="hello" echo $VAR1아무것도 반환하지 않는 것은 어떻습니까?
Zibri

2
@Zibri 확장이 일어날 때입니다. 아마도 다음과 같이 할 수있을 것입니다.VAR1="hello" bash -c 'echo $VAR1'
cybergrind

여러 환경 변수에 대해서도 이것이 가능하다는 것을 보여주기 위해 찬성했습니다.
Binarus

70
env VAR=value myScript args ...

18
또는VAR=value myScript args ...
Rockallite 2014 년

9
1. PATH=$PATH:XYZ echo $PATH | grep XYZ그래도 출력이없는 이유는 무엇입니까? 2. 사용과 사용하지 않는 것의 차이점은 무엇입니까 env?
qubodup

18
쉘 은 echo 명령을 실행 하기 전에 PATH 변수 확장하기 때문 입니다. 확장을 연기해야합니다. 한 가지 방법 : PATH=$PATH:XYZ sh -c 'echo $PATH' | grep XYZ- 작은 따옴표는 여기에 열쇠
글렌 잭맨

14
env그것을 사용하는 것과 사용 하지 않는 것의 차이점은 무엇입니까 ?
Mohammed Noureldin

이것은 oneliner 등에서 작업에 표시되지 않습니다IFS=$'\n' for l in lines; do ... done
drevicko

31

그냥 넣어

export HOME=/blah/whatever

스크립트에서 변경하려는 지점에서. 각 프로세스에는 고유 한 환경 변수 세트가 있으므로이 정의는 스크립트가 종료 될 때 자동으로 의미가 없어집니다 (그리고 환경이 변경된 bash 인스턴스와 함께).


11
오해의 소지가 있습니다. export변수를 서브 쉘에 전달하지만 부모 쉘은 제어하지 않습니다. "#! / bin / sh"등으로 시작하는 스크립트를 작성하는 경우 설정 한 모든 변수는 스크립트가 종료 될 때 사라집니다.
brightlancer 2011-08-20

1
@brightlancer, 그것은 사실이지만 내가 쓴 내용과 모순되지 않는 것 같습니다. (스크립트가 백그라운드 프로세스를 시작할 가능성을 제외하고는 이것이 OP의 정교함 수준을 넘어서 혼란 스러울 뿐이라고 생각합니다).
hmakholm이 Monica에게

5
수출은 불필요합니다. 또한 그의 스크립트가 인터프리터 (#! / bin / sh 등)를 호출하는 경우에만 답변이 작동합니다. 그의 "대본"이 그렇지 않으면 방금 말한 내용이 대본의 끝까지 지속됩니다. 그것이 내가 당신의 대답이 오해의 소지가 있다고 말한 이유입니다. 정확할 수도 있고 아닐 수도 있지만, 누군가가 "수출"이 그가 찾던 필수 요소라고 생각하게 만들 수 있기 때문에 불필요하고 혼란스러운 부분이 분명히 있습니다.
brightlancer 2011-08-20

7
@brightlancer : 영업의 스크립트가 호출하는 하위 스크립트 자체는 $ HOME에 의존한다는 경우 수출이 필요하고, 내가 생각하지 감히 사건이 아니었다. 또한 bash는 스크립트에 shebang 행이 없지만 실행 비트가 설정된 텍스트 파일 인 경우에도 스크립트를 실행하기 위해 서브 쉘을 생성합니다. 시도해보십시오-스크립트의 변수 할당은 호출 한 셸에 표시되지 않습니다. source명령을 입력하는 것과 동일한 셸에서 실행될 스크립트 를 명시 적으로 지정한 경우에만 가능합니다 .
hmakholm은 Monica에게

4
@brightlancer : $HOME스크립트에서 실행되는 명령으로 상속 받으려면 내보내기가 필요합니다 . 그리고 그가 그렇지 않고의 설정이 $HOME스크립트 자체의 이익만을위한 것이라면 아마도 스크립트를 수정하여 $HOME.
Keith Thompson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.