sudo bash -c 权限被拒绝

sudo bash -c 权限被拒绝

在我的 Linux(centos 7)中,有 2 个用户 A(普通用户)和 B(属于 wheel 组)。我尝试通过使用用户 B 运行以下命令来更改用户 A 的 .bash_profile 文件。

./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

命令$()中不需要操作员。sudo sh -c ...

当您使用此运算符时sed '$a\' ${filePath} > ${filePath}.baksed然后重定向到文件>命令将首先在用户下执行b权限不足以进行写入。并且只有sudo sh -c在执行前面命令的输出后才会执行。

改用sudo sh -c "sed ..."、 和sudo sh -c "echo ..."

相关内容