【问题标题】:string is not getting converted properly while setting it from ssh command从 ssh 命令设置字符串时未正确转换字符串
【发布时间】:2018-12-03 18:36:02
【问题描述】:

这是我的操作文件,它正在运行 ssh 命令以使用给定参数 ssh 进入我的工作站并调用 deployer.sh 文件。

MOUNT_ECR_LOGIN="-v /usr/bin/docker-credential-ecr-login:/usr/bin/docker-credential-ecr-login"

ACTIONS="${WORKSTATION_EC2} MOUNT_ECR_LOGIN=$MOUNT_ECR_LOGIN ./deployer.sh"

在运行时被转换成如下字符串:

ssh -t -t -q ec2-user@networkba-bastion ssh -q -t ec2-user@workstation MOUNT_ECR_LOGIN=-v /usr/bin/docker-credential-ecr-login:/usr/bin/docker-credential-ecr-login ./deployer.sh

以下是错误:

bash: /usr/bin/docker-credential-ecr-login:/usr/bin/docker-credential-ecr-login: No such file or directory

我正在为运行 docker run 命令的deployer.sh 文件设置变量。

不幸的是,MOUNT_ECR_LOGIN 仅指定为 -v 而不是带有文件信息的完整字符串。我应该逃离这里的空间吗?还是我们需要其他解决方案?

【问题讨论】:

  • 你的命令太长了。你能把它简化一点,让那些愿意帮忙的人更容易阅读吗?
  • 我已经简化了

标签: string bash docker ssh


【解决方案1】:

更新

问题是由于参数拆分,因为两个ssh,参数必须被引用两次

MOUNT_ECR_LOGIN=$'\'"-v /usr/bin/docker-credential-ecr-login:/usr/bin/docker-credential-ecr-login"\''

ACTIONS="${WORKSTATION_EC2} MOUNT_ECR_LOGIN=$MOUNT_ECR_LOGIN ./deployer.sh"

上一个答案是

,一个快速的解决办法是使用数组

ACTIONS=("${WORKSTATION_EC2}" "SOURCE_REGISTRY=$SOURCE_REGISTRY" "DEPLOYMENT_NAME=$DEPLOYMENT_NAME" "MOUNT_ECR_LOGIN=$MOUNT_ECR_LOGIN" ./deployer.sh)

然后使用"${ACTIONS[@]}"

【讨论】:

  • 似乎可能是由于双 ssh 导致两次解析参数并在 -v 之后拆分,您是否尝试在 -v 之后删除空格,否则您将不得不通过环境变量源文件
  • 我对分辨率做了同样的事情,因为没有其他任何工作。
猜你喜欢
  • 2018-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
  • 2013-07-13
  • 2020-11-12
  • 2017-03-06
相关资源
最近更新 更多