В моем linux (centos 7) есть 2 пользователя A (обычный пользователь) и B (принадлежит к группе wheel). Я пытаюсь изменить файл .bash_profile пользователя A, выполнив следующую команду с пользователем B.

./test.sh /home/a/.bash_profile "экспортировать что-то"

#!/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

Однако это дало следующую ошибку:

/home/a/.bash_profile.bak: В доступе отказано

1 ответ1

0

Вам не нужен оператор $() в командах sudo sh -c ...

Когда вы используете этот оператор для sed '$a\' ${filePath} > ${filePath}.bak sed и перенаправления в file > сначала выполняются с правами пользователя b , которых недостаточно для записи. И только после этого sudo sh -c выполняется после вывода предыдущих команд.

Вместо этого используйте sudo sh -c "sed ..." и sudo sh -c "echo ..." .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .