gpt4 book ai didi

bash - ansible-playbook --extra-vars 不使用 $@ 在 bash 脚本中接受多个参数

转载 作者:行者123 更新时间:2023-12-04 03:08:40 25 4
gpt4 key购买 nike

我想从 bash 脚本运行 ansible-playbook,其中一些传递给脚本的参数将以 --extra-vars 的形式传递给 Ansible .

EXTRA_VARS="--extra-vars '${@:2}'"
ansible-playbook \
-i hosts_$1 \
$EXTRA_VARS \
playbook.yml

我将命令放在多行中,因为在我的脚本中有几个长选项传递给 ansible,我想提高可读性。如果用户没有提供 $1 之外的任何变量,那么我只想执行剧本。

但是,当我运行类似的东西时:

./myscript inventory VAR1=KEY1 VAR2=KEY2

我得到一个错误:

ERROR! the playbook: VAR2=KEY2' could not be found.

我在设置时没有正确引用 EXTRA-VARS 吗?还是 bash 在扩展变量时做了一些有趣的事情?

最佳答案

让我们用一个抽象的例子来演示 - 我将使用 printf 以便换行符分隔输出中的每个参数。

从合适的$*开始:

set -- a b c d

然后:

vars="--vars '${@:2}'"
printf %s\\n $vars

输出是:

--vars
'b
c
d'

这表明当 $vars 展开时,拆分发生在字符串的空格处,以及 $@ 的每个内插元素之间。

但是,Bash 支持数组变量:

vars=(--vars "${@:2}")
printf %s\\n "${vars[@]}"
--vars
b
c
d

或者您可能想要一个单独的、以空格分隔的参数:

vars=(--vars "${*:2}")
printf %s\\n "${vars[@]}"
--vars
b c d

关于bash - ansible-playbook --extra-vars 不使用 $@ 在 bash 脚本中接受多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46932801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com