【问题标题】:Error 'Syntax error: "(" unexpected' when declaring arrays in bash错误'语法错误:“(”意外'在bash中声明数组时
【发布时间】:2016-08-28 12:03:27
【问题描述】:

this OP 相同的问题,但必须是单独的原因。

以下脚本:

#!/bin/sh
arr=("cat" "dog" "bird")

以交互方式工作(debian),但在通过 crontab 调用时失败:

/bin/sh: 2: /path/zero_check.sh: Syntax error: "(" unexpected

我尝试使用#!/bin/bash shebang,并使用declare -a arr=("cat" "dog" "bird") 声明数组,但没有效果。

知道为什么吗?

【问题讨论】:

  • 你如何在 crontab 中调用你的脚本?
  • 错误信息清楚地表明 Bash 实际上并未用于执行脚本。
  • 我尝试了两个 shebang,但只是将脚本复制到错误的不同点。以下解决方案有效。
  • bashsh 最适合 cron 吗?
  • @geotheory 这真的取决于你想做什么。如果你需要数组,那么 Bash。

标签: bash crontab


【解决方案1】:

在 crontab 条目中明确指定您的解释器。使用

bash /path/zero_check.sh

而不是

/path/zero_check.sh

【讨论】:

  • 如果脚本已经包含 #!/bin/bash 标头,这应该不是问题。
  • 我想我只是在错误的位置复制了工作脚本。该解决方案有效。
  • 如果这是答案,那么您忽略的脚本中还有另一个问题。 :(
  • @SaintHax 同意;问题是不正确的shebang行(使用/bin/sh而不是'/bin/bash); overriding that by running it with bash`实际上只是隐藏了问题,最好修复shebang(参见fedorqui的回答)。
【解决方案2】:

这里的问题是你正在使用这个shebang:

#!/bin/sh

arrays 是 Bash 特定的,shell 不允许。

因此,要使其正常工作,请将脚本的 shebang 更改为 Bash:

#!/bin/bash

【讨论】:

    【解决方案3】:

    仅用于文档, 我有一个旧脚本要运行,它在 Shebang 中有一个语法错误:

    #/bin/bash

    而不是

    #!/bin/bash

    当然还要检查脚本是否可执行。

    【讨论】:

    • 是的!这两天我一直在发疯,因为我忘记了感叹号。这节省了我剩下的一点点理智。
    【解决方案4】:

    与不正确的 bash 函数声明非常相似的问题。这在命令行中可以正常工作,但会导致 cron 失败...

    function test () { ... }
    

    Cron 应该将错误保存在 /var/mail 中

    我还建议使用“shellcheck”进行 linting,因为它发现了另一个我没有注意到的错误。

    【讨论】:

      猜你喜欢
      • 2011-09-14
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      相关资源
      最近更新 更多