ruby 在Vagrantfile中,我定义了一个局部变量,如何将其作为参数传递给bash脚本?$var,#var,#{var}?

8tntrjer  于 2023-06-05  发布在  Ruby
关注(0)|答案(2)|浏览(63)

在一个 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
bgtovc5b

bgtovc5b1#

我发送参数到shell脚本的方式不正确。
它看起来工作,但不完美,在inline <<-SHELL内部。
我发现自己成功地做到了这一点,相反:

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, path: "../common/050_Certificats.sh"
config.vm.provision "shell", privileged: false, path: "../common/070_Utilitaires.sh"
config.vm.provision "shell", privileged: false, path: "../common/100_JDK.sh", args: ["17"]
config.vm.provision "shell", privileged: false, path: "../common/150_Postgresql-Postgis.sh", args: ["15", "3", "postgres"]
config.vm.provision "shell", privileged: false, path: "../common/200_NodeJS-Angular.sh", args: ["16"]
config.vm.provision "shell", privileged: false, path: "../common/250_ELK.sh", args: ["7.x"]
config.vm.provision "shell", privileged: false, path: "../common/300_Kafka.sh", args: ["3.4.0", "2.12", "#{update}"]
8oomwypt

8oomwypt2#

我会努力的

bash common/300_Kafka.sh "3.4.0" "2.12" "#{update}"

因为从错误消息看,它似乎明确地期望字符串"true""false"

相关问题