【问题标题】:command "$(</token/ecr-token)" is not working in sh shell but working in bash , how we can make this command work in sh shell命令 "$(</token/ecr-token)" 不在 sh shell 中工作,但在 bash 中工作,我们如何使该命令在 sh shell 中工作
【发布时间】:2021-11-23 08:05:09
【问题描述】:
kubectl create secret docker-registry $SECRET_NAME \
                 --dry-run=client \
                 --docker-server="$ECR_REGISTRY" \
                 --docker-username=AWS \
                 --docker-password="$(</token/ecr-token)" \
                 -o yaml

文件令牌/ecr-token 已就位,但仍无法填充 --docker-password

【问题讨论】:

  • 您在/token/ecr-token 中有一个前导/,因此它不会尝试读取token/ecr-token
  • 查看/token/ecr-token你会看到一个命令之类的,$(&lt;)会加载它然后执行它并返回一个值
  • so --docker-password="$(
  • 您说(在对我的回答的评论中)echo "$(&lt;token/ecr-token)" 在容器内返回一个空响应。你是在同一个容器内运行kubectl create 命令吗?
  • yes....` - /bin/sh - -ce - |- kubectl create secret docker-registry $SECRET_NAME \ --dry-run=client \ --docker-server="$ ECR_REGISTRY" \ --docker-username=AWS \ --docker-password="$(/ecr-token)" \ --docker-password="token/ecr-token" \ -o yaml | kubectl apply -f - `

标签: linux docker shell kubernetes amazon-eks


【解决方案1】:

$(&lt; /path/to/a/file) 语法是一种特殊形式的命令替换,受多个 UNIX shell 支持,包括 ksh(Oracle 在线文档)、bashzsh。它尝试打开列出的文件,然后读取该文件的内容来代替$(&lt; ...)。它与命令替换的不同之处在于它不执行给定的文件或其内容。

在此 UNIX 和 Linux 问答中查看更多详细信息:Understanding Bash's Read-a-File Command Substitution

请注意,您的命令指定了/token/ecr-token绝对 文件路径,但随后描述了token/ecr-token相对 路径。如果您在命令行中使用相对路径,则该文件将需要相对于您当前的工作目录存在。当然,要读取的内容,文件必须是当前用户可读的。

如果您的 shell 不支持此功能,解决方法是使用$(cat /path/to/a/file),例如:

kubectl create secret docker-registry "$SECRET_NAME" \
                 --dry-run=client \
                 --docker-server="$ECR_REGISTRY" \
                 --docker-username=AWS \
                 --docker-password="$(cat /token/ecr-token)" \
                 -o yaml

【讨论】:

  • 我在容器内做cat token/ecr-token。并且能够看到令牌但是当我这样做时... echo "$(kubectl exec -it ecr-credentials-sync-init-lfs6r -c create-secret sh -n flux-system。所以基本上使用 sh
  • 有什么方法可以在 sh 而不是 bash 或任何其他 shell 中读取和执行
  • 这听起来与“$(&lt; /token/ecr-token) 的含义是什么”不同的问题,但是 -- questions are free!
  • 我只想从 Sh shell kubectl create secret docker-registry $SECRET_NAME \ --dry-run=client \ --docker-server="$ECR_REGISTRY" \ --docker-username=AWS \ --docker-password="$(&lt;/token/ecr-token)" 读取和执行...我们如何做到这一点..我无法在 SH shell 中找到命令替换..所以最好的选择是什么
  • 我试图回答你的问题;如果您可以edit您的问题来解释您无法在当前的外壳中使用此扩展,我(或其他回答者)可以尝试找出原因并提供替代方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 2019-03-19
  • 2012-11-22
相关资源
最近更新 更多