我在.zshrc
文件中有这个别名:
alias rmcons="docker rm -f $(docker ps -aq)"
但是在尝试执行它之后,它只删除一个容器,然后打印
$rmcons
ef8197f147fb
zsh: command not found: c2ea2673f9e4
zsh: command not found: 4603059f1618
zsh: command not found: 40ad60328595
如何删除docker ps -aq
显示的所有容器?
答案 0 :(得分:1)
您需要使用单引号(''
)而不是双引号(""
)。
alias rmcons='docker rm -f $(docker ps -aq)'
如果使用双引号,则在定义别名时将评估命令替换 $(docker ps -aq)
。在您的示例中,这相当于
alias rmcons="docker rm -f ef8197f147fb
c2ea2673f9e4
4603059f1618
40ad60328595"
由于换行符是命令分隔符(如;
),因此该别名由四个命令替换:docker rm -f ef8197f147fb
,c2ea2673f9e4
,4603059f1618
和40ad60328595
。最后三个在您的系统上不存在,因此"命令未找到"。它还意味着将使用与{别名定义 - 相同的docker ps -aq
输出 - 而不是运行别名时的输出。
另一方面,如果使用单引号,别名实际上将替换为您定义的确切命令:docker rm -f $(docker ps -aq)
。虽然docker ps -aq
仍然会返回带换行符的输出,但这些换行符现在只解析了参数之间的单词分隔符。
答案 1 :(得分:0)
警告:未经测试。我不使用/有码头。
我认为你应该首先序列化输出“转义”新行。
您也可以使用for
循环,尝试:
for id in `docker ps -aq`; do docker rm -f $id; done
注意反引用来解析命令的输出。
您也可以直接使用$()
代替其快捷方式反引号。
我建议先使用echo
进行测试,而不是使用rm
进行测试:
for id in `docker -ps -aq`; do echo rm -f $id; done
,并使用rm
及其-i
开关在删除前提示确认。
我希望docker
的{{1}}子命令有一个。