머신을 설정하는 인스턴스 구성 스크립트를 만들고 있습니다.
sudo ie 를 통해 스크립트를 실행합니다 sudo run.sh
. 대부분의 단계에는 루트 액세스가 필요하지만 스크립트의 일부 단계에서는 그렇지 않으므로 sudo를 실행하는 권한 없는 사용자로 실행하는 것을 선호합니다.
sudo로 실행되는 스크립트에서 다음을 수행하려고 합니다.
sudo -i -u username sh -c 'echo $MY_ENV'
.bashrc
포함되어 있으므로 export MY_ENV=something
위 명령이 "뭔가"를 인쇄하기를 원합니다.
다음 명령을 실행하기 위해 스크립트 내에서 일시적으로 다른 사용자로 전환하는 방법사용자의 셸 환경을 포함합니다.?
답변1
.bashrc
스크립트가 아닌 대화형 쉘에 의해서만 실행됩니다. 환경 변수를 정의하는 위치가 잘못되었습니다. 바라보다모든 쉘이 읽을 수 있는 ".bashrc"에 해당하는 파일이 있습니까?그리고우분투 위키.
bash에게 명시적으로 읽도록 지시할 수 있습니다 .bashrc
. 물론 대신 다른 쉘을 실행해야 bash
합니다 sh
.
sudo -i -u username bash -c '. `~/.bashrc; echo "$MY_ENV"'
.bashrc
그러나 이는 터미널에서 실행된다고 가정할 때 파일에 내용이 포함될 수 있고 키 바인딩, 별칭, 프롬프트 등을 설정하는 데 시간이 걸리기 때문에 좋지 않은 생각입니다.
~/.profile
합리적인 해결책은 환경 변수 정의를 자신이 속한 위치(예: 또는 )에 두는 것입니다 ~/.pam_environment
.
¹ 뭔가 이상한 이유로 bash가 호출 되지 않는 한 .sshd