我遇到了zsh
别名的问题。
我的.zprofile
文件中有这个别名:alias cleanimg="for i in `docker images | grep '<none>' | awk '{print $3}'`; do; docker rmi -f $i; done"
.
从我的终端运行cleanimg
时,我收到此错误:zsh: parse error near `do'
。
我试图在do
关键字之后立即删除;
,但它没有解决问题。 但是,如果我直接从终端执行代码,该别名将正常运行。
任何人都可以帮助我解决此语法错误吗?
提前感谢。
不要尝试为此使用别名;请使用函数。
cleanimg () {
for i in $(docker images | awk '/<none>/ {print $3}'); do
docker rmi -f "$i"
done
}
这样就不必正确引用,以便在使用别名时而不是在定义别名时运行命令替换。
(此外,grep | awk
管道几乎总是可以单独使用awk
来实现。
(我也想知道您是否可以使用--filters
选项来省去awk
和循环;也许docker rmi -f $(docker images -q -f "dangling=true")
?
如果你只想清理你的 docker 镜像,你可以设置一个别名,如下所示:
alias cleanimg='docker rmi -f $(docker images -q -f "dangling=true")'
sub 命令docker images -q -f "dangling=true"
返回要删除的所有 id,并且由于docker rmi
接受参数,因此您可以直接传递它们
你的 for 循环中有一个额外的分号,只需将其修复为 -alias cleanimg="for i in
码头工人镜像 | grep '' | awk '{print $3}'; do docker rmi -f $i; done"