bash 命令替换出现空白

bash command substituation comes up blank

我有以下Dockerfile

FROM public.ecr.aws/docker/library/python:3.7-slim-buster as base
WORKDIR /code
RUN apt-get update -y && \
    pip install --upgrade pip && \
    mkdir ~/.aws \
    && touch ~/.aws/credentials
RUN apt-get install -y nodejs npm awscli jq

这是 slim-buster 的基础。 我正在尝试从这个推荐的 解决方案

中执行一个命令 aws sts 命令

但是 eval 解决方案出现“空白”或者括号在 make 命令中没有正确转义:

sts-qa:
    eval $(aws sts assume-role --role-arn arn:aws:iam::1234556778:role/aws-role --role-session-name pebble | jq -r '.Credentials | "export AWS_ACCESS_KEY_ID=\(.AccessKeyId)\n export AWS_SECRET_ACCESS_KEY=\(.SecretAccessKey)\nexport AWS_SESSION_TOKEN=\(.SessionToken)\n"')

我得到的错误是:

root@b79fd0ebf8cf:/code# make sts-qa
eval \n export AWS_SECRET_ACCESS_KEY=\(.SecretAccessKey)\n export AWS_SESSION_TOKEN=\(.SessionToken)\n"')
/bin/sh: 1: Syntax error: ")" unexpected

我试过:

我 运行 没有想法

$(...) 是用于扩展变量名的 Makefile 语法,因此 ( 由您要执行的命令中的第一个未转义的 ) 关闭。您需要加倍 $ 才能按字面意思对待它。

sts-qa:
        eval $$(aws sts assume-role --role-arn arn:aws:iam::1234556778:role/aws-role --role-session-name pebble | jq -r '.Credentials | "export AWS_ACCESS_KEY_ID=\(.AccessKeyId)\n export AWS_SECRET_ACCESS_KEY=\(.SecretAccessKey)\nexport AWS_SESSION_TOKEN=\(.SessionToken)\n"')