如何以 root 用户身份将文本附加到文件末尾?

如何以 root 用户身份将文本附加到文件末尾?

因此,我尝试为我的树莓派创建一个安装脚本,首先要给它们一个静态 IP。

echo -e "Enter static IP"
read static_ip

echo -e "Enter DNS IP"
read dns_ip

echo -e ""
echo -e "The following settings will be set"

echo -e "\e[32mStatic IP:\e[0m\t${static_ip}"
echo -e "\e[32mDNS IP:\e[0m\t${dns_ip}"

sudo echo "interface wlan0" >> /etc/dhcpcd.conf
sudo echo "static ip_address=${static_ip}/24" >> /etc/dhcpcd.conf
sudo echo "static routers=${dns_ip}" >> /etc/dhcpcd.conf
sudo echo "static domain_name_servers=${dns_ip}" >> /etc/dhcpcd.conf

但它一直说“权限被拒绝”,我想知道我在这里做错了什么?

答案1

在 中, shell 在启动之前设置了sudo echo … >> …重定向 ( )。如果即将自行打开文件,它可以;但它即将从 继承的 stdout 开始,而后者又从调用 shell 设置的 stdin 开始。您收到的错误意味着 shell 被拒绝访问该文件。>>sudoechosudo

使用sudo tee。重点是它tee可以自己打开文件:

echo "something" | sudo tee -a /output/file > /dev/null

这样tee将把-a文本附加到()并具有/output/file适当的权限。

tee旨在传递其输入并复制它(一般来说:相乘)。在这种情况下,一份副本进入文件,另一份沿着管道传输。由于我们只需要第一个,我们将第二个副本重定向到,/dev/null这样它就不会出现在控制台中。进入的所有内容都会/dev/null消失。

答案2

您需要在子 shell 中运行它才能使重定向起作用。

sudo sh -c echo "字符串" >> 文件

[来自 sudo 手册页:示例]

相关内容