sudo -u bash do usuário funciona, mas $ HOME não está mudando de acordo

2

Estou escrevendo um script para configurar novas instalações do Debian. O problema está neste código:

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

PROBLEMA:

Quando eu sudo para outro usuário, a variável $ HOME não está mostrando / alterando este novo diretório pessoal de usuários.

PERGUNTAS :

Você pode me explicar o problema?

Como eu faria isso da melhor e mais eficiente maneira?

Editar:

Por que eu continuo recebendo " cp: cannot stat '': No such file or directory " ou " cp: missing opereand " no meu comando cp? Eu acho que tem algo a ver com o $ HOME novamente ..........

    
por somethingSomething 18.08.2018 / 01:19

1 resposta

5

O conteúdo do here-doc é avaliado ANTES de sudo ser chamado. Isso significa que todas as instâncias de $HOME estão no contexto do chamador, não do sudo . Você pode ver isso em ação aqui:

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

A saída é

apple

Se você citar seu marcador EOF , seu conteúdo será citado correspondentemente:

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

Saída

banana
    
por 18.08.2018 / 01:47