【问题标题】:I got 'syntax error: "(" unexpected' (expecting "done") [duplicate]我得到'语法错误:“(”意外'(期望“完成”)[重复]
【发布时间】:2015-03-26 19:43:53
【问题描述】:

我有一个非常简单的 shell 脚本,我用它来循环目录,并调用另一个 shell 脚本。我在我的本地机器上写了它(OS X 运行 Bash 3.2)并在运行 Bash 4.2 的远程服务器上使用它。

在服务器上,当我输入which bash 时,我得到/bin/bash,所以我在顶部添加了这一行。我仍然收到此错误,指向以 arrIN= 开头的行...

8:run_all_verification.sh:语法错误:“(”意外(预期“完成”)

shell脚本:

#!/usr/bin/bash

# Base name for all experiments
BASE_EXP_ID=$1;

for i in ${BASE_EXP_ID}*
do
        # Split file name by "__"
        arrIN=(${i//__/ });
        EXP_ID=${arrIN[0]}
        NUM_FEATURES=${arrIN[1]}
        echo "${EXP_ID} ${NUM_FEATURES}"

        sh run_verification.sh ${EXP_ID} ${NUM_FEATURES}

done

【问题讨论】:

  • 如果您的意思是 bash,则运行 bash 而不是 sh(对于 run_verification.sh)。您如何运行发布的脚本(我假设是run_all_verification.sh)? ./run_all_verification.sh? sh run_all_verification.sh? bash run_all_verification.sh?

标签: bash shell


【解决方案1】:

您的错误消息来自 Dash,可能是因为您运行了 sh filename

要使用 Bash 运行脚本,请使用 bash filename(或 ./filename)。

【讨论】:

  • 我没有意识到有区别。在我的本地机器和服务器上,我运行 sh run_all_verification.sh...
  • 永远不要使用 sh 运行 bash 脚本。在 shdash 的 Debian 发行版上,它几乎总是会失败。由于兼容性设置,它甚至可能在 shbash 的 OS X 上失败。
  • 当我运行./run_all..sh 时,我得到“权限被拒绝”。当我运行bash run_all.sh 时,我得到“无法打开 run_verification.sh”,这是内部调用的脚本
  • 无视。我的文件名错误
  • 您可以使用chmod +x yourfile 授予自己执行文件的权限。请记住,sh run_verification.sh 与您最初看到的 bash 与 sh 问题相同,它会在当前工作目录中查找 run_verification.sh 而不一定是 run_all.sh 所在的目录。
猜你喜欢
  • 2017-01-26
  • 2022-09-23
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-18
相关资源
最近更新 更多