分页: 1 / 1

脚本生成脚本的一个错误

发表于 : 2011-12-11 10:26
7rack
源代码是

代码: 全选

#!/bin/bash
  # generate-script.sh
  # 这个脚本的诞生基于Albert Reiner的一个主意. 

  OUTFILE=generated.sh        


  # -----------------------------------------------------------
  
  (
  cat <<'EOF'
  #!/bin/bash

  echo "This is a generated shell script."
  #  Note that since we are inside a subshell,
  #+ we can't access variables in the "outside" script.

  echo "Generated file will be named: $OUTFILE"
  #  Above line will not work as normally expected
  #+ because parameter expansion has been disabled.
  #  Instead, the result is literal output.

  a=7
  b=3

  let "c = $a * $b"
  echo "c = $c"

  exit 0
  EOF
  ) > $OUTFILE
  # -----------------------------------------------------------

  #  将'limit string'引用起来将会阻止上边
  #+ here document消息体中的变量扩展. 
  #  这会使得输出文件中的内容保持here document消息体中的原文. 

  if [ -f "$OUTFILE" ]
  then
  chmod 755 $OUTFILE 
  else
    echo "Problem in creating file: \"$OUTFILE\""
  fi

  exit 0


产生的错误是

代码: 全选

./generate-script: 行 50: 警告: 立即文档在第 11 行被文件结束符分隔 (需要 `EOF')
./generate-script: 行 51: 语法错误: 未预期的文件结尾
应该是EOF哪里出问题了吧,前一个用的是单引号。顺便问一下vim下哪个插件能让编辑好的代码,在最后自动调整对其(排版),像vs2008中的ALT+F8吧

Re: 脚本生成脚本的一个错误

发表于 : 2011-12-11 10:52
7rack
仔细看错误提示是

代码: 全选

(需要 `EOF')
而不是单引号,为什么呢

Re: 脚本生成脚本的一个错误

发表于 : 2011-12-11 11:29
枫叶饭团
还有let,这多老的脚本啊 第50行是哪一行

Re: 脚本生成脚本的一个错误

发表于 : 2011-12-11 11:33
7rack
枫叶饭团 写了:还有let,这多老的脚本啊 第50行是哪一行
现在都用

代码: 全选

((。。。))
:em01在vim里显示就50行啊,第50行是

代码: 全选

 exit 0

Re: 脚本生成脚本的一个错误

发表于 : 2011-12-11 22:32
fnan
EOF 这行要确保没有一个空格。

Re: 脚本生成脚本的一个错误

发表于 : 2011-12-11 23:26
7rack
fnan 写了:EOF 这行要确保没有一个空格。
大牛能说说为什么吗? :em01

Re: 脚本生成脚本的一个错误

发表于 : 2011-12-12 6:15
fnan
'EOF ' 与 'EOF' 是不同的。

Re: 脚本生成脚本的一个错误

发表于 : 2011-12-12 9:58
7rack
fnan 写了:'EOF ' 与 'EOF' 是不同的。
原来又是空格的问题啊, :em06