无法使 bash 脚本从 cloud-init 工作

Tom*_*mas 4 linux bash shell

显然我在这里做错了。

云初始化脚本 /etc/cloud/cloud.cfg

...
runcmd:
 - [ sh, /opt/cloud-init-scripts/whatever.sh ]
Run Code Online (Sandbox Code Playgroud)

剧本 /opt/cloud-init-scripts/whatever.sh

#!/bin/bash
...
. /home/ubuntu/third-party/script.sh --silent
Run Code Online (Sandbox Code Playgroud)

第三方脚本 /home/ubuntu/third-party/script.sh

#!/usr/bin/env bash

function some_function() {
...
Run Code Online (Sandbox Code Playgroud)

我进入时出错 /var/log/cloud-init-output.log

/opt/cloud-init-scripts/whatever.sh: 3: /home/ubuntu/third-party/script.sh: Syntax error: "(" unexpected
Run Code Online (Sandbox Code Playgroud)

我一定在这里遗漏了一些明显的东西。我尝试使用source.并且sh在调用第三方脚本时,尝试在任何地方更改shebang,但没有成功。

如果我从命令行运行相同的命令,它就可以工作。

Ini*_*ian 7

您已sh在 下指定了shell runcmd,但将 she-bang 设置为bash。后者无关紧要,因为如果您运行sh /opt/cloud-init-scripts/whatever.sh它,它将使用 sh shell 运行。我猜您可能正在使用POSIXshshell不兼容的非shell 功能。

或可替换地,如果你的目的是要运行脚本bash外壳,改runCmdcloud-init脚本

runcmd:
 - [ bash, /opt/cloud-init-scripts/whatever.sh ]
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,我最终做了:`- [ /opt/cloud-init-scrips/whatever.sh ]` 没有指定要使用的命令 (2认同)