sudo bash -c deu permissão negada

0

No meu linux (centos 7), existem 2 usuários A (usuário normal) e B (pertence ao grupo de roda). Eu estou tentando alterar o arquivo .bash_profile do usuário executando o seguinte comando com o usuário B.

./ test.sh /home/a/.bash_profile "exportar algo"

#!/bin/bash

set -o errexit

filePath=${1};
content=${2};

result='sudo grep "$content" $filePath || true'\
if [[ -z $result ]] || [[ $result == \#* ]]; then
    echo "inside the first if";
    sudo sh -c "$(sed '$a\' ${filePath} > ${filePath}.bak)";
    sudo sh -c "$(echo $content >> ${filePath}.bak)";
    sudo rm -fr ${filePath};
    sudo mv ${filePath}.bak ${filePath};
fi

No entanto, deu o seguinte erro:

/home/a/.bash_profile.bak: permissão negada

    
por st. 05.02.2017 / 13:02

1 resposta

0

Você não precisa do operador $() nos comandos sudo sh -c ... .

Quando você usa esse operador para sed '$a\' ${filePath} > ${filePath}.bak , então sed e o redirecionamento para os comandos file > são executados primeiro sob os direitos b do usuário, que são insuficientes para gravação. E somente depois que sudo sh -c é executado na saída dos comandos anteriores.

Use sudo sh -c "sed ..." e sudo sh -c "echo ..." .

    
por 05.02.2017 / 23:35