首页 > 解决方案 > Bash 脚本 SSH 命令变量插值

问题描述

首先:我搜索了论坛并查看了文档,但仍然无法正确。

所以,我有一个要在远程服务器上运行的 docker 命令,来自我的 bash 脚本。我想将环境变量(在运行脚本的本地机器上)传递给远程服务器。此外,我需要远程命令的响应。

这是我真正想做的和我需要的:脚本是我们 Traefik/Docker/Elixir/Phoenix 应用程序设置的一个小包装器,能够轻松连接到 Erlang 观察者内正在运行的 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'"

感谢您的输入!

标签: linuxbashdockerssh

解决方案


你可以试试这个命令:

ssh -t $USER@$IP "docker exec -it \$(docker ps -a -q --filter Name=/$APP_NAME) bash -c './bin/app remote'"

推荐阅读