我正在为Raspberry Pis开发一个引导脚本。该脚本确定Pi本身是Model 2还是Model 3,并相应地设置其WiFi特征。
WiFi特性的更改放在/etc/rc.local文件(Raspbian)中,这是通过bootstrap.sh脚本完成的。
片段
# model revision number to determine pi
PI_MODEL=$(cat /proc/cpuinfo | grep "Revision" | awk '{print $3}')
case "$PI_MODEL" in
"rev_1A" | "rev_1B")
# Write the wlan config to the rc.local file
cp /etc/rc.local /etc/rc.local.backup
(
cat << 'EOF'
#!/bin/sh -e
iwconfig wlan0 mode ad-hoc essid pi-adhoc channel 6 txpower 0
exit 0
EOF
) > /etc/rc.local
# Case for Pi-2 ends
;;
"pi3_rev1a" | "pi3_rev1b")
# write the wlan config to rc.local file
(
cat << 'EOF'
#!/bin/sh -e
ifconfig wlan0 down
iwconfig wlan0 mode ad-hoc channel 6 essid pi-adhoc txpower 0
ifconfig wlan0 up
exit 0
EOF
) > /etc/rc.local
;;
# case for Pi ends here
esac然而,在任何情况下,都会发出警告:
警告:这里-文件排在..。由文件末尾分隔(需要“`EOF”) 语法错误:文件的意外结束
这里可能出了什么问题?
其主要思想是检查Pi的类型,并将相应的iwconfig语句添加到/etc/rc.local文件中,以便在重新启动时加入网络。
备注:
rev_1A等并不是为了简洁的原因而写的参考文献:
来自tldp.org的示例19-8
发布于 2017-02-17 17:20:11
由于您的这里文档是缩进的,所以您应该使用-表单,以便删除前面的选项卡。除非您使用制表符进行缩进,否则还必须在列0处有结束标记。
cat <<-'EOF'
#!/bin/sh -e
iwconfig wlan0 mode ad-hoc essid pi-adhoc channel 6 txpower 0
exit 0
EOF如果重定向运算符为“<<-”,则从输入行和包含分隔符的行中删除所有前导制表符。这使得shell脚本中的文档可以以一种自然的方式缩进。
发布于 2017-02-17 17:28:44
要解决“语法错误:文件的意外结束”:
而不是:
(
cat << 'EOF'
#code
EOF
) > /etc/rc.local你想:
cat << EOF > /etc/rc.local
#code
EOF如果您想缩进代码(为了使代码看起来漂亮或其他),(包括 EOF语句)必须添加一个-来忽略前面的选项卡,如下所示:
cat <<- EOF > /etc/rc.local
#code
EOFhttps://stackoverflow.com/questions/42303432
复制相似问题