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