在我的 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}.bak
,sed
然后重定向到文件>
命令将首先在用户下执行b权限不足以进行写入。并且只有sudo sh -c
在执行前面命令的输出后才会执行。
改用sudo sh -c "sed ..."
、 和sudo sh -c "echo ..."
。