다음과 같이 Bash에서 환경변수를 설정하려고 하는데, bash -c 'export FOO=BAR'
이전에 설정한 변수를 사용하거나 읽으려고 하면 변수가 초기화되지 않고 명령이 빈 줄을 반환하는 것을 볼 수 있습니다.echo $FOO
bash -c 'echo $FOO'
bash -c 'export FOO=BAR'
처음에 프로그램을 시작한 동일한 셸에서 액세스할 수 있도록 Bash를 사용하여 명령줄에서 환경 변수를 설정하려면 어떻게 해야 합니까 ?
답변1
실행하면 bash -c 'FOO=bar'
새 인스턴스가 생성되어 명령을 실행한 다음 즉시 종료됩니다. 변수는 아주 짧은 시간 동안만 존재하다가 마치 존재하지 않았던 것처럼 사라집니다.bash
FOO=bar
FOO
당신이 언급하고 있는 예제 문서는 다음과 매우 유사한 다른 작업을 수행합니다.
bash -c 'export FOO=bar; run_some_entry_point'
source
세부 사항은 약간 다릅니다. 변수를 정의하기 위해 스크립트가 실행되고 명령이 실패할 경우 진입점 실행을 &&
방지하기 위해 명령을 연결하는 데 사용됩니다 .source
bash -c 'source file_containing_variable_exports && run_some_entry_point'
가장 중요한 것은 이것이 단일 쉘 인스턴스에 의해 실행되는 단일 명령이라는 것입니다. 셸 인스턴스는 내보낸 것으로 표시된 변수를 정의한 다음 내보낸 변수가 존재하는 환경에서 컨테이너(또는 기타) 진입점을 시작합니다.
위 명령의 이 버전은 작동하지 않습니다.
bash -c 'export FOO=bar'; run_some_entry_point
여기서 환경 변수를 정의한 bash 인스턴스는 종료되고 원래 셸은 변수 없이 진입점을 실행합니다.
그런데 특정 환경 변수를 사용하여 명령을 실행하려면 별도의 명령을 사용할 필요가 없습니다 export
. 쉘에는 다음과 같은 구문이 있습니다.
bash -c 'FOO=bar some_program arg ...'
여러 변수가 주어질 수 있습니다. 이러한 변수는 쉘 자체 환경에 설정되지 않으며 단순히 실행 프로그램에 추가됩니다.