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

kil*_*eet 2 sudo bash

所以我试图为我的树莓派创建一个安装脚本,第一件事是给它们一个静态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
Run Code Online (Sandbox Code Playgroud)

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

Kam*_*ski 5

重定向sudo echo \xe2\x80\xa6 >> \xe2\x80\xa6( >>) 是由 shell 在sudo启动之前设置的。如果echo要自己打开文件,它可以;但它将从继承的 stdout 开始sudo,而 stdout 又从调用 shell 设置的 stdin 开始。您收到的错误意味着 shell 被拒绝访问该文件。

\n

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

\n
echo "something" | sudo tee -a /output/file > /dev/null\n
Run Code Online (Sandbox Code Playgroud)\n

这种方式tee会将 ( -a) 文本附加到/output/file具有适当权限的文件中。

\n

tee旨在传递其输入并复制它(通常:乘法)。在这种情况下,一份副本进入文件,另一份则沿着管道传输。由于我们只需要第一个副本,因此我们将第二个副本重定向到,/dev/null以便它不会出现在控制台中。一切会/dev/null消失。

\n