命令"$(</token/ecr-token)"在 sh shell 中不起作用,但在 bash 中工作,我们如何使这个命令在 sh shell 中工作


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

文件token/ecr-token已到位,但仍无法填充——docker-password

$(< /path/to/a/file)语法是一种特殊形式的命令替换,由几个UNIX shell支持,包括ksh (Oracle在线文档)、bash和zsh。它尝试打开列出的文件,然后读取该文件的内容,以取代$(< ...)。它不同于命令替换,因为它不执行给定的文件或其内容。

查看此UNIX &Linux Q/A:理解Bash的Read-a-File命令替换

请注意,您的命令指定了/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

相关内容

  • 没有找到相关文章

最新更新