在Ubuntu上安装Bazel时出现错误

3
我正在尝试在我的 EC2 Ubuntu 机器上安装 Bazel。我使用 wget最新的 Bazel 发布下载了 .sh 文件,然后使用 sh ./bazel-0.2.1-installer-linux-x86_64.sh 运行它。但是,我遇到了以下错误: ./bazel-0.2.1-installer-linux-x86_64.sh: 106: ./bazel-0.2.1-installer-linux-x86_64.sh: Syntax error: "(" unexpected 查看 .sh 文件中第 106 行,我发现以下代码:function usage() {。不确定为什么该行中的 ( 会出问题。

我尝试使用其他安装程序(bazel-0.2.1-installer-darwin-x86_64.shbazel-0.2.1-jdk7-installer-darwin-x86_64.shbazel-0.2.1-jdk7-installer-linux-x86_64.sh),它们都在同一行上有相同的问题。


1
语法是 function usage { … }usage() { … },对吗?不是组合。Bash 手册中的shell functions指示 function usage [()] { … }(大致如此); 也许 bash ./bazel-0.2.1-install-linux-x86_64.sh 可以工作? - Jonathan Leffler
这是他们最新版本中的一个错误吗?https://github.com/bazelbuild/bazel/releases - rafaelcosman
我刚刚检查了他们之前的发布版本,它也有 function usage() { - rafaelcosman
1
谢谢,@JonathanLeffler,我刚刚尝试了bash而不是sh,它起作用了!随意发布答案。 - rafaelcosman
安装程序具有 #!/bin/bash shebang,应默认选择bash。 - Damien Martin-Guillerez
如果您使用sh script运行脚本,则shebang行不会对程序的运行产生任何影响。只有当您使用./script(或script/path/to/bin/script)时,shebang行才会发挥作用。但是,如果脚本以#!/bin/bash开头,则最好使用bash script而不是sh script来运行它,因为可能会出现此类问题。 - Jonathan Leffler
2个回答

6

函数的常规语法如下:

function usage { … }
usage() { … }

它们不是组合吗,而不是组合?

然而,在shell functions上的Bash手册大致表明:

 function usage [()] { … }

手册中的精确符号:

function名称[()]复合命令[重定向]

也许使用bash而不是sh会起作用?

bash ./bazel-0.2.1-install-linux-x86_64.sh

评论表明这确实有效。


0
Bazel安装脚本已更新,使用语法usage() {(不带“function”)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接