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