다른 사용자로 명령을 실행하는 스크립트를 작성하려고 합니다. 그러나 내 자신의 .bashrc 설정 컨텍스트 내에서요. 나는 이 스크립트가 우리 팀 전체에 적용되기를 원합니다.
이것은 sudo에서 .bashrc 파일을 가져오려는 시도입니다.
homedir=$(echo ~)
cmd="source $homedir/.bashrc; <SOME COMMAND>"
sudo -u <other_user> bash -c $cmd
오류가 발생합니다.
<my_home_dir>/.bashrc: line 0: source: filename argument required
source: usage: source filename [arguments]
그러나 소스 명령을 변수에 보관하지 않고 직접 지정하면 $cmd
오류가 발생하지 않습니다. 즉, 다음 코드 조각은 완벽하게 작동합니다.
sudo -u <other_user> bash -c 'source <my_home_dir>/.bashrc; <SOME COMMAND>'
문제의 근원은 무엇입니까? 각 팀 구성원이 자신의 홈 디렉터리를 지정하지 않고도 스크립트를 범용으로 만들 수 있나요?
(사용자 이름과 홈 디렉토리는 의도적으로 난독화되었습니다)
답변1
변수를 적절하게 사용하려면 대신 을 사용하는 것이 좋습니다 "${cmd}"
. $cmd
이것이 ""
바로 여러분이 놓치고 있는 것입니다. bash 자체에 --rcfile 인수를 사용하면 전체 노력을 좀 더 우아하게 해결할 수 있습니다.