linux - Bash 脚本 SSH 命令变量插值
问题描述
首先:我搜索了论坛并查看了文档,但仍然无法正确。
所以,我有一个要在远程服务器上运行的 docker 命令,来自我的 bash 脚本。我想将环境变量(在运行脚本的本地机器上)传递给远程服务器。此外,我需要远程命令的响应。
这是我真正想做的和我需要的:脚本是我们 Traefik/Docker/Elixir/Phoenix 应用程序设置的一个小包装器,能够轻松连接到 Erlang 观察者内正在运行的 Elixir 应用程序。使用脚本,步骤将是:
- ssh 进入远程机器
docker ps
查看所有正在运行的容器,因为在我们的蓝色/绿色部署中,活动的容器更改了名称- docker exec 进入正确的容器
- 在 docker 容器内执行命令以连接到正在运行的 Elixir 应用程序
我现在使用的命令是:
CONTAINER=$(ssh -q $USER@$IP 'sudo docker ps --format "{{.Names}}" | grep ""$APP_NAME"" | head -n 1')
主要问题是带有 grep 和 ENV var 的部分......它是空的,不会被替换。这是有道理的,因为远程机器上不存在该 var,它存在于我的本地机器上。我尝试了单引号, $()
, ... 要么它不起作用,要么我在网上找到的解决方案执行了命令,但是我无法获取容器名称,我需要后续命令:
ssh -o 'RequestTTY force' $USER@$IP "sudo docker exec -i -t $CONTAINER /bin/bash -c './bin/app remote'"
感谢您的输入!
解决方案
你可以试试这个命令:
ssh -t $USER@$IP "docker exec -it \$(docker ps -a -q --filter Name=/$APP_NAME) bash -c './bin/app remote'"
推荐阅读
- python - 运行特定测试用例时导入错误
- css - HSL值的CSS变量计算
- docker-compose - ECS 上的 ThingsBoard
- reactjs - 无法覆盖 Typescript 中的局部变量
- mysql - 无法从节点中的 sql 查询中获取变量
- json - 错误:列是 json 类型,但表达式在 Hibernate 中是不同的字符类型
- google-sheets - Google Sheets 查询函数中的窗口函数
- sql - 将查询从 SQL 转换为 pyspark
- node.js - 如何使用 Axios npm 从 link.medium.com 访问 Medium.com 最终 URL
- python - R & W python 转 Modbus