我试图使用bash脚本在ssh上运行一些docker-compose命令,如下所示。我的意思是我有一个可执行的Shell脚本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
答案 0 :(得分:0)
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