sudo -u user bash는 작동하지만 $HOME에는 해당 변경 사항이 없습니다.

sudo -u user bash는 작동하지만 $HOME에는 해당 변경 사항이 없습니다.

나는 새로운 데비안 설치를 설정하는 스크립트를 작성 중입니다. 문제는 다음 코드에 있습니다.

if [ ! -z "$USER1" ]
then
    sudo -u "$USER1" bash <<-EOF
    cp "$BASHRC $HOME"/.bashrc
    wget https://raw.github.com/trapd00r/LS_COLORS/master/LS_COLORS -O "$HOME"/.dircolors
    echo 'eval $(dircolors -b $HOME/.dircolors)' >> "$HOME"/.bashrc
    . "$HOME"/.bashrc
    echo "Here is LS_COLORS in action: "
    ls -l "$HOME"/ 
EOF

질문:

다른 사용자에게 sudo를 실행하면 $HOME 변수는 이 새 사용자의 홈 디렉터리를 표시/변경하지 않습니다.

질문:

이 문제를 나에게 설명해 주실 수 있나요?

어떻게 하면 가장 좋고 효율적인 방법으로 이를 수행할 수 있습니까?

편집하다:

내 cp 명령에 " cp: cannot stat '': No such file or directory" 또는 " "가 항상 나타나는 이유는 무엇입니까? cp: missing opereand또 $HOME과 관련이 있는 것 같은데......

답변1

Here-doc 콘텐츠는 sudo호출하기 전에 평가됩니다. 이는 의 모든 인스턴스가 $HOME호출자의 컨텍스트에 있음을 의미합니다 sudo. 대신 여기에서 실제 동작을 볼 수 있습니다.

A=apple
bash <<-EOF
A=banana
echo "$A"
EOF

출력은 다음과 같습니다

apple

태그를 인용하면 EOF해당 내용도 그에 따라 인용됩니다.

A=apple
bash <<-'EOF'
A=banana
echo "$A"
EOF

산출

banana

관련 정보