如何将环境变量从本地shell复制到shellscript中的远程ssh连接?

曼文德拉·辛格(Manvendra Singh)

我目前正在研究用于构建docker映像并重新启动在远程主机上运行的容器的shell脚本。下面是该代码的精简版本。

#!/bin/bash -xe
# usages: ./deploy.sh [PROJECT_REPO] [DOCKER_IMAGE] [TARGET_HOST] [KEYPAIR_PATH]
PROJECT_REPO=$1
DOCKER_IMAGE=$2
TARGET_HOST=$3
KEYPAIR_PATH=$4
PROJECT_DIR=$(echo $PROJECT_REPO | cut -d'/' -f 2 | cut -d '.' -f 1)
CONTAINER=$PROJECT_DIR
USER="ubuntu"
git clone $PROJECT_REPO
cd $PROJECT_DIR

if docker build -t $DOCKER_IMAGE .; then
        docker push $DOCKER_IMAGE
        if ssh -o StrictHostKeyChecking=no -i $KEYPAIR_PATH  $USER@$TARGET_HOST -yes DOCKER_IMAGE=$DOCKER_IMAGE CONTAINER=$CONTAINER '\
        docker pull $DOCKER_IMAGE && \
        docker stop $CONTAINER
        docker rm $CONTAINER
        docker run -d --name=$CONTAINER  $DOCKER_IMAGE'; then
                echo "success"
        else
                echo "Failure"  
                exit 1
        fi
else
        echo "Error during building image"
        exit 1
fi

我正在尝试使该脚本通用化,以便通过运行包含项目详细信息(存储库URL,docker映像)的脚本将其用于不同的项目,但是当我尝试运行脚本时,docker出现了错误命令,原因是环境变量的值,DOCKER_IMAGE并且CONTAINER在远程主机上为空。

三元组

对于这个简单的脚本,使用双引号而不是单引号将填充父外壳程序中的变量。

当然,如果你的脚本包含字符串或应其他表达式不是由你开始这个脚本主机上的母贝进行插值,那些需要进行转义或以其他方式中和。但是您似乎没有任何一个。

if ssh -o StrictHostKeyChecking=no -i $KEYPAIR_PATH  $USER@$TARGET_HOST -yes "\
        docker pull $DOCKER_IMAGE && \
        docker stop $CONTAINER
        docker rm $CONTAINER
        docker run -d --name=$CONTAINER  $DOCKER_IMAGE"; then
                echo "success"

也许还会考虑使用here文档(以便您可以在嵌入式脚本中使用单引号和双引号),并可能了解何时引用事物。只要您的变量不包含不规则的空格或通配符,它​​就可以正常工作,但这是不可思议的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将变量复制到新的Linux Shell?

来自分类Dev

使用ssh将文件从远程复制到本地

来自分类Dev

如何通过ssh从远程计算机中的文件将文件内容复制到本地剪贴板

来自分类Dev

如何将本地计算机中的文件复制到远程虚拟机?

来自分类Dev

如何将环境变量从sshd的环境传递到新的SSH会话?

来自分类Dev

如何将文件从远程服务器复制到本地计算机?

来自分类Dev

如何将目录从本地计算机复制到远程计算机

来自分类Dev

如何将目录从本地计算机复制到远程计算机

来自分类Dev

如何将文件从远程服务器复制到本地计算机?

来自分类Dev

如何将文件从本地计算机复制到远程虚拟机?

来自分类Dev

如何将文件从远程服务器复制到本地计算机?

来自分类Dev

如何将文件从远程网络复制到本地桌面

来自分类Dev

如何将远程命令的输出复制到本地剪贴板?

来自分类Dev

如何将文件从远程UNIX服务器复制到本地Windows?

来自分类Dev

如何将文件内容从远程服务器复制到本地机器位置?

来自分类Dev

如何使用 Terraform 将变量更改为值的文件从本地复制到远程?

来自分类Dev

如何将文件从SSH远程主机复制到Jenkins服务器

来自分类Dev

如何将私钥从远程服务器正确复制到我的本地计算机,以便可以使用ssh连接

来自分类Dev

使用本地环境变量在具有SSH的远程计算机上运行Shell脚本

来自分类Dev

如何通过ssh将jpg复制到本地

来自分类Dev

如何将Docker卷复制到本地?

来自分类Dev

如何将 DVD 复制到本地系统?

来自分类Dev

如何将文件复制到远程linux服务器中的共享帐户

来自分类Dev

如何将环境变量嵌入到 Rails 中的 .coffee 文件中?

来自分类Dev

如何将集合的一部分从远程服务器复制到MongoDB中的本地数据库

来自分类Dev

如何将 perl 脚本中设置的环境变量导出到批处理 shell?

来自分类Dev

如何将远程Windows上的文件复制到Linux计算机上的本地Linux?

来自分类Dev

C#将文件本地复制到远程或远程复制到本地

来自分类Dev

如何将文件从Docker容器传输/复制到ubuntu 18.04中的本地目录?

Related 相关文章

  1. 1

    如何将变量复制到新的Linux Shell?

  2. 2

    使用ssh将文件从远程复制到本地

  3. 3

    如何通过ssh从远程计算机中的文件将文件内容复制到本地剪贴板

  4. 4

    如何将本地计算机中的文件复制到远程虚拟机?

  5. 5

    如何将环境变量从sshd的环境传递到新的SSH会话?

  6. 6

    如何将文件从远程服务器复制到本地计算机?

  7. 7

    如何将目录从本地计算机复制到远程计算机

  8. 8

    如何将目录从本地计算机复制到远程计算机

  9. 9

    如何将文件从远程服务器复制到本地计算机?

  10. 10

    如何将文件从本地计算机复制到远程虚拟机?

  11. 11

    如何将文件从远程服务器复制到本地计算机?

  12. 12

    如何将文件从远程网络复制到本地桌面

  13. 13

    如何将远程命令的输出复制到本地剪贴板?

  14. 14

    如何将文件从远程UNIX服务器复制到本地Windows?

  15. 15

    如何将文件内容从远程服务器复制到本地机器位置?

  16. 16

    如何使用 Terraform 将变量更改为值的文件从本地复制到远程?

  17. 17

    如何将文件从SSH远程主机复制到Jenkins服务器

  18. 18

    如何将私钥从远程服务器正确复制到我的本地计算机,以便可以使用ssh连接

  19. 19

    使用本地环境变量在具有SSH的远程计算机上运行Shell脚本

  20. 20

    如何通过ssh将jpg复制到本地

  21. 21

    如何将Docker卷复制到本地?

  22. 22

    如何将 DVD 复制到本地系统?

  23. 23

    如何将文件复制到远程linux服务器中的共享帐户

  24. 24

    如何将环境变量嵌入到 Rails 中的 .coffee 文件中?

  25. 25

    如何将集合的一部分从远程服务器复制到MongoDB中的本地数据库

  26. 26

    如何将 perl 脚本中设置的环境变量导出到批处理 shell?

  27. 27

    如何将远程Windows上的文件复制到Linux计算机上的本地Linux?

  28. 28

    C#将文件本地复制到远程或远程复制到本地

  29. 29

    如何将文件从Docker容器传输/复制到ubuntu 18.04中的本地目录?

热门标签

归档