sudo bash -c дав дозвіл відмовлено


0

У моєму linux (centos 7) є 2 користувачі A (звичайний користувач) та B (належить до колесної групи). Я намагаюся змінити .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: Дозвіл відхилено

Відповіді:


0

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

Коли ви використовуєте цей оператор для того sed '$a\' ${filePath} > ${filePath}.bakчасу, sedа перенаправлення на файлові >команди спочатку виконуються під правами користувача b , які недостатньо для запису. І тільки після цього sudo sh -cвиконується при виході попередніх команд.

Використовуйте sudo sh -c "sed ..."і sudo sh -c "echo ..."замість цього.


в ньому написано "sed: -e вираз №1, char 1: невстановлена ​​адресна виразка"
st.

SED не розуміє, чим ти хочеш займатися. Як я бачу, ви намагаєтесь додати щось наприкінці $ {filePath}, але ви нічого не додаєте.
Олег Болден

Насправді, те, що я хочу зробити, це те, що з користувачем B додайте новий рядок заголовка рядка .bash_profile A, якщо новий рядок не існує . Потім додайте новий вміст у кінці файлу .bash_profile. При цьому створюйте резервну копію оригінального файлу на випадок.
вул.

Щоб додати новий рядок, використовуйте regexp '\ ​​$ a \'
Олег Болден

Знак долара слід уникати за допомогою \ у регулярному вираженні вище. Якщо ви не уникаєте цього, bash розглядає його як змінну $aі намагається замінити його своїм значенням.
Олег Болден
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.