"bash -c 'export FOO=BAR'"를 사용하여 설정된 환경 변수에 액세스합니다.

"bash -c 'export FOO=BAR'"를 사용하여 설정된 환경 변수에 액세스합니다.

다음과 같이 Bash에서 환경변수를 설정하려고 하는데, bash -c 'export FOO=BAR'이전에 설정한 변수를 사용하거나 읽으려고 하면 변수가 초기화되지 않고 명령이 빈 줄을 반환하는 것을 볼 수 있습니다.echo $FOObash -c 'echo $FOO'

bash -c 'export FOO=BAR'처음에 프로그램을 시작한 동일한 셸에서 액세스할 수 있도록 Bash를 사용하여 명령줄에서 환경 변수를 설정하려면 어떻게 해야 합니까 ?

답변1

실행하면 bash -c 'FOO=bar'새 인스턴스가 생성되어 명령을 실행한 다음 즉시 종료됩니다. 변수는 아주 짧은 시간 동안만 존재하다가 마치 존재하지 않았던 것처럼 사라집니다.bashFOO=barFOO

당신이 언급하고 있는 예제 문서는 다음과 매우 유사한 다른 작업을 수행합니다.

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 ...'

여러 변수가 주어질 수 있습니다. 이러한 변수는 쉘 자체 환경에 설정되지 않으며 단순히 실행 프로그램에 추가됩니다.

관련 정보