Flink问题:解决 bin/config.sh: line 32: syntax error near unexpected token

问题

执行 sh start-cluster.sh脚本启动集群,报错:

/xxx/bin/config.sh:行32: syntax error near unexpected token `(`
/xxx/bin/config.sh:行32: `    done << (find "$FLINK_LIB_DIR" ! -type d -name '*.jar' -print0 | sort -z)'

解决

不要使用sh来启动,使用 bash start-cluster.sh 或 ./start-cluster.sh来启动。

这是因为start-cluster.sh文件中有sh不支持的语法。下面说明下bash和sh的区别:

bash是sh的增强版,sh全称是Bourne Shell,bash全称是Bourne Again Shell,linux系统默认使用的就是bash的posix模式。可以查看 echo $SHELL。值为/bin/bash。虽然sh是个软连接,指向了bash,但是还是有区别的,sh执行的相当于bash -posix xxx.sh,也就是说xxx.sh脚本必须遵守posix的规则,如果不然就会报错。
shell script一般第一行指定解释器,所以还是指定#!/bin/bash好,不要再用#!/bin/sh了。
sh是一个shell。运行sh a.sh,表示我使用sh来解释这个脚本;如果我直接运行./a.sh,首先你会查找脚本第一行是否指定了解释器,如果没指定,那么就用当前系统默认的shell(大多数linux默认是bash),如果指定了解释器,那么就将该脚本交给指定的解释器。

上一篇:Shell编程


下一篇:proxysql运维实践