Shell脚本[预期行尾等,但发现未知令牌]

时间:2010-03-13 21:21:27

标签: shell

我正在尝试根据this article构建一个Synergy AutoStart脚本,shell正在给我错误

  

语法错误

     

预计行尾等,但发现   未知令牌

这是我正在制作的剧本......

#!/bin/sh
. /etc/rc.common

run=(/usr/local/bin/synergyc -n $(hostname -s) -1 -f 192.168.0.108)

KeepAlive ()
{
 proc=${1##*/}

 while [ -x "$1" ]
 do
  if ! ps axco command | grep -q "^${proc}\$"
  then
   "$@"
  fi
   sleep 3 
 done
}

StartService ()
{
 ConsoleMessage "Starting Synergy"
 KeepAlive "${run[@]}" &
}

StopService ()
{
 return 0
}

RestartService ()
{
 return 0
}

RunService "$1"

当抛出错误时,“句号”会在此行. /etc/rc.common

上突出显示

这里有什么我想念的吗?

2 个答案:

答案 0 :(得分:1)

如果您在Windows机器上进行编辑,请尝试在文件上使用dos2unix。

答案 1 :(得分:1)

请注意,特定问题是line endings。 Unixen使用line-feed字符(LF),Mac传统上使用carriage-return(CR),MS OS使用CR LF。使用错误的行结尾,shell将整个shell脚本视为单行; CR不被视为空格并且token化。因此,消息说shell“预期行尾[...]但发现未知令牌”。通过dos2unix运行脚本可修复行结尾。

阅读Apple的“Shell Scripting Primer”。除此之外,它还告诉您如何使用Text Edit.app(以及命令行中的pico和nano)编写shell脚本。或者,学习使用AquamacsVim for OS X