从ssh命令设置字符串时,字符串转换不正确

时间:2018-12-03 07:37:41

标签: string bash docker ssh

这是我的操作文件,该文件正在运行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,而不是具有文件信息的完整字符串。我应该逃脱这里的空间吗?还是我们需要其他解决方案?

1 个答案:

答案 0 :(得分:0)

已更新

问题是由于参数分裂,由于使用了两个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[@]}"