Переменная не раскрывается при передаче в качестве параметра команде docker-compose внутри блока heredoc - PullRequest
0 голосов
/ 07 октября 2018

Я пытался запустить некоторую команду docker-compose через ssh, используя скрипт bash, как показано ниже.Я имею в виду, что у меня есть исполняемый скрипт оболочки deploy.sh, который содержит следующие фрагменты кода

ssh -tt -o StrictHostKeyChecking=no root@142.32.45.2 << EOF
DIR=test
echo \${DIR}
docker-compose --project-name \${DIR} up -d
EOF

Но переменная DIR не раскрывается при передаче в качестве параметра в docker-compose.Это выполняется, как показано ниже.В то время как echo \${DIR} дает правильный вывод, т.е. test .

docker-compose --project-name ${DIR} up -d

1 Ответ

0 голосов
/ 07 октября 2018
ssh -tt -o StrictHostKeyChecking=no root@142.32.45.2 <<'EOF'
DIR=test
echo ${DIR}
docker-compose --project-name ${DIR} up -d
EOF

Избавьтесь от \ $ - это мешает расширению вашей переменной.Но во втором обзоре я вижу, что это ваше намерение.Если вы хотите запретить расширение всех переменных до тех пор, пока ваш код не будет выполнен на удаленном хосте, попробуйте поместить слово heredoc в кавычки.Таким образом, $ передается в скрипт, который передается в ssh.

В качестве второго предложения (в соответствии с моим комментарием ниже) я хотел бы просто отправить параметризованный скрипт на удаленный хост и затем выполнить его (после изменения его разрешений).

# Make script
cat >compose.sh <<'EOF'
#!/bin/bash
DIR=$1
docker-compose --project-name $DIR
EOF

scp -o StrictHostKeyChecking=no compose.sh root@142.32.45.2: 
ssh -o StrictHostKeyChecking=no root@142.32.45.2 chmod +x ./compose.sh \; ./compose.sh test
...