我的文件中有这个别名.zshrc:
alias rmcons="docker rm -f $(docker ps -aq)"
Run Code Online (Sandbox Code Playgroud)
但在尝试执行它之后,它只删除一个容器,然后打印
$rmcons
ef8197f147fb
zsh: command not found: c2ea2673f9e4
zsh: command not found: 4603059f1618
zsh: command not found: 40ad60328595
Run Code Online (Sandbox Code Playgroud)
如何删除所有docker ps -aq显示的容器?
Ada*_*hon 14
您需要使用单引号 ( '') 而不是双引号 ( "")。
alias rmcons='docker rm -f $(docker ps -aq)'
Run Code Online (Sandbox Code Playgroud)
如果使用双引号,则在定义别名时将评估命令替换。 $(docker ps -aq)在你的例子中这相当于
alias rmcons="docker rm -f ef8197f147fb
c2ea2673f9e4
4603059f1618
40ad60328595"
Run Code Online (Sandbox Code Playgroud)
由于换行符是命令分隔符(如) ,;因此该别名被四个命令替换:docker rm -f ef8197f147fb、c2ea2673f9e4和4603059f1618。40ad60328595最后三个在您的系统上不存在,因此“找不到命令”。这也意味着将使用与别名定义相同的输出docker ps -aq,而不是运行别名时的输出。
另一方面,如果您使用单引号,别名实际上将替换为您定义的确切命令:docker rm -f $(docker ps -aq)。尽管docker ps -aq仍会返回带有换行符的输出,但这些换行符现在仅是参数之间解析的单词分隔符。