Syntax error: "(" unexpected(linux系统)

 

自己写了一个简单的shell脚本,在serve1上还能运行,转到serve2就不能运行了,报错如下:

然后就开始百度,看见了了转载的博客和一篇原创博客,转载博客的原地址没有在文中看见,原创博客的地址上面已经给出。原创博客分析了一些问题,而转载博客则更“傻瓜式”操作,在这里感谢两位大佬:


 

昨天更新了Virtualmin的系统识别部分,目的是让它能支持Debian系统下的一键安装和优化,代码修改了差不多,将VPS重新安装为Debian,通过sh ./virtualmin.sh执行代码就报“Syntax error: “(” unexpected”错误,通过bash ./virtualmin.sh执行就没问题。几经查找语法,没有问题,后来在网上找到问题原因:
        代码对于标准bash而言没有错,因为Ubuntu/Debian为了加快开机速度,用dash代替了传统的bash,是dash在捣鬼,解决方法就是取消dash。

sudo dpkg-reconfigure dash

        在选择项中选No,搞定了!


 

问题:

在MAC上写了一段shell脚本,放到Ubuntu上运行总是报下面这个错误,单步调试都是对的,就是直接运行会报错。

  1. [email protected]:~/package$ sh package.sh
  2. package.sh: 8: package.sh: Syntax error: "(" unexpected

原因:

兼容性问题,因为linux将sh默认指向了dash,而不是bash

解决:

  1. #在root下面执行 dpkg-reconfigure dash,选择no

  2. [email protected]:~/package$ su

  3. Password:

  4. [email protected]:/home/bixiaopeng/package# dpkg-reconfigure dash


 

再次执行脚本就OK了



我的最终原因是启动命令写错了:

comd = 'nohup python -u {path}main.py > {path}log_new.txt 2>&1 &'.format(path=new_path)




快捷回帖