在`docker exec`命令中如何转义$()语法

13

我正在尝试运行一个命令,其中一个参数是$()(不确定如何称呼),应该在Docker容器中进行评估。例如:

docker exec mycontainer echo $(whoami)
当执行此命令时,首先在主机上运行whoami,因此主机的用户会被插入。相反,我希望评估容器中的whoami命令,以便回显容器的用户。 我发现很难找到任何有关此事的帮助。我尝试过但没有成功的替代方法:
docker exec mycontainer 'echo $(whoami)'
docker exec mycontainer echo '$(whoami)'
docker exec mycontainer echo $$(whoami)
docker exec mycontainer echo \$(whoami)

如何实现这个目标?


2
这被称为命令替换。执行echo "$(command)"是一个极其无用的方法,只需简单地写command即可。而且,除非您明确要求 shell 在将命令替换的输出传递给 echo 之前执行空格标记化和通配符扩展,否则echo $(command)会出错。 - tripleee
2
@tripleee 谢谢!这里只是举例使用了 echo - Pieter Jongsma
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
19

你可以输入一个带有参数的单个命令,但是这个单个命令可以是shbash

docker exec mycontainer sh -c 'echo $(whoami)'

如果您需要在脚本片段中使用Bash语法(这可以非常复杂;如果您需要在引号内使用单引号,那么可以使用几种常见的解决方法),那么请明显使用bash,而不是sh


顺带提一下,也可以参考 sh 和 bash 的区别 - tripleee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,