在一个 Vagrantfile 中,我想运行脚本。
但是它们的某些部分不应该在供应模式下运行。
根据 Vagrant 命令的值,我设置了一个局部变量update = "true"
(或false)。
例如,puts
表示它的值为"false"
,
但是,我无法将其内容发送到bash脚本,用于参数。
我试过$update
,#update
,#{update}
,update
都没有成功
在线bash common/300_Kafka.sh "3.4.0" "2.12" $update
Vagrantfile的一部分:
if ARGV[0] == "provision"
update = "true"
else
update = "false"
end
puts "Vagrant box. Démarrage en mode mise à jour : " + update
config.vm.provision "file", source: "../common", destination: "common"
config.vm.provision "shell", privileged: false, inline: <<-SHELL
bash common/050_Certificats.sh
bash common/070_Utilitaires.sh
bash common/100_JDK.sh "17"
bash common/150_Postgresql-Postgis.sh "15" "3" "postgres"
bash common/200_NodeJS-Angular.sh "16"
bash common/250_ELK.sh "7.x"
bash common/300_Kafka.sh "3.4.0" "2.12" $update
SHELL
控制台上的消息:
Vagrant box. Démarrage en mode mise à jour : false
default: Indiquez si Kafka est en installation initiale (false) ou update (true). n'est pas accepté.
bash脚本调用,测试值:
#!/bin/bash
# $1: Version de Kafka [3.4.0]
# $2: Version de Scala associée [2.12]
# $3: Mode update (true) ou installation initiale (false)
echo "300 : Installation de Kafka $1 basé sur Scala $2"
export DEBIAN_FRONTEND=noninteractive
if [ -z "$1" ]; then
echo "Précisez la version de Kafka à installer. [Recommandée : 3.4.0]" >&2;
exit 1;
fi
if [ -z "$2" ]; then
echo "Précisez la version de Scala liée. [Recommandée : 2.12]" >&2;
exit 1;
fi
if [ "$3" != "true" ] && [ "$3" != "false" ]; then
echo "Indiquez si Kafka est en installation initiale (false) ou update (true). $3 n'est pas accepté." >&2;
exit 1;
fi
update=$3
if [ "$update" == "false" ]; then
cd /tmp && wget -q "https://downloads.apache.org/kafka/$1/kafka_$2-$1.tgz"
sudo tar -xf "kafka_$2-$1.tgz" -C /opt
echo "export KAFKA_HOME=/opt/kafka_$2-$1" >> ~/.profile
else
echo "En mode update, Kafka ne se réinstallera pas."
fi
2条答案
按热度按时间bgtovc5b1#
我发送参数到shell脚本的方式不正确。
它看起来工作,但不完美,在
inline <<-SHELL
内部。我发现自己成功地做到了这一点,相反:
8oomwypt2#
我会努力的
因为从错误消息看,它似乎明确地期望字符串
"true"
或"false"
。