为什么zsh别名无法正确评估嵌套命令?

4
在我的~/.zshrc文件中,我设置了一个别名。
alias dkill="docker kill $(docker ps -q)"

但它实际上并不像命令本身那样运行。
由于某种原因,它尝试将容器名称作为命令执行,而不是将它们传递给docker kill命令。
Error response from daemon: Cannot kill container: 3f1xxxxx0c4: No such container: 3f1xxxxx0c4
zsh: command not found: 0aexxxxxx913
zsh: command not found: 46acxxxx75cd
zsh: command not found: 20f9xxxxx9c1
zsh: command not found: 63edxxxxc085
zsh: command not found: 6328xxxxfe4d

如何重新定义别名以正确终止容器


3
双引号会导致命令替换在你定义别名时被评估。一般来说,函数在各个方面都比别名更优越。 - tripleee
1个回答

8

正如 @triplee 所说,当你定义别名时(在打开 zsh 会话时),该命令就已经被评估了(容器可能不存在)。

在你的 .zshrc 中使用一个函数代替:

function dkill { docker kill $(docker ps -q) }

或者使用单引号:

alias dkill='docker kill $(docker ps -q)'

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