首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个-doc语句不能在开关的情况下执行?

为什么这个-doc语句不能在开关的情况下执行?
EN

Stack Overflow用户
提问于 2017-02-17 16:57:11
回答 2查看 686关注 0票数 0

我正在为Raspberry Pis开发一个引导脚本。该脚本确定Pi本身是Model 2还是Model 3,并相应地设置其WiFi特征。

WiFi特性的更改放在/etc/rc.local文件(Raspbian)中,这是通过bootstrap.sh脚本完成的。

片段

代码语言:javascript
复制
# 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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-17 17:20:11

由于您的这里文档是缩进的,所以您应该使用-表单,以便删除前面的选项卡。除非您使用制表符进行缩进,否则还必须在列0处有结束标记。

代码语言:javascript
复制
    cat <<-'EOF'
    #!/bin/sh -e

    iwconfig wlan0 mode ad-hoc essid pi-adhoc channel 6 txpower 0

    exit 0
EOF

来自GNU Bash手册

如果重定向运算符为“<<-”,则从输入行和包含分隔符的行中删除所有前导制表符。这使得shell脚本中的文档可以以一种自然的方式缩进。

票数 4
EN

Stack Overflow用户

发布于 2017-02-17 17:28:44

要解决“语法错误:文件的意外结束”:

而不是:

代码语言:javascript
复制
(
cat << 'EOF'

#code

EOF
) > /etc/rc.local

你想:

代码语言:javascript
复制
cat << EOF > /etc/rc.local

#code

EOF

如果您想缩进代码(为了使代码看起来漂亮或其他),(包括 EOF语句)必须添加一个-来忽略前面的选项卡,如下所示:

代码语言:javascript
复制
cat <<- EOF > /etc/rc.local

    #code

    EOF
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42303432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档