因此,我尝试为我的树莓派创建一个安装脚本,首先要给它们一个静态 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 被拒绝访问该文件。>>
sudo
echo
sudo
使用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 手册页:示例]