用于删除所有 docker 容器的 zsh 别名返回未找到命令

alo*_*oha 3 zsh zshrc

我的文件中有这个别名.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 ef8197f147fbc2ea2673f9e44603059f161840ad60328595最后三个在您的系统上不存在,因此“找不到命令”。这也意味着将使用与别名定义相同的输出docker ps -aq,而不是运行别名时的输出。

另一方面,如果您使用单引号,别名实际上将替换为您定义的确切命令:docker rm -f $(docker ps -aq)。尽管docker ps -aq仍会返回带有换行符的输出,但这些换行符现在仅是参数之间解析的单词分隔符。