显然我在这里做错了。
云初始化脚本 /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,但没有成功。
如果我从命令行运行相同的命令,它就可以工作。
您已sh
在 下指定了shell runcmd
,但将 she-bang 设置为bash
。后者无关紧要,因为如果您运行sh /opt/cloud-init-scripts/whatever.sh
它,它将使用 sh shell 运行。我猜您可能正在使用POSIX
与sh
shell不兼容的非shell 功能。
或可替换地,如果你的目的是要运行脚本bash
外壳,改runCmd
在cloud-init
脚本
runcmd:
- [ bash, /opt/cloud-init-scripts/whatever.sh ]
Run Code Online (Sandbox Code Playgroud)