别名 zsh:“do”附近解析错误

Cle*_*ent 2 terminal alias zsh parse-error

我遇到了 的别名问题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,但它没有解决问题。但是,如果我直接从终端执行代码,该别名会正确运行。

有人可以帮我解决这个语法错误吗?

提前致谢。

che*_*ner 6

不要尝试为此使用别名;使用一个函数。

cleanimg () {
  for i in $(docker images | awk '/<none>/ {print $3}'); do
    docker rmi -f "$i"
  done
}
Run Code Online (Sandbox Code Playgroud)

这使您不必正确引用,以便在使用别名时而不是在定义别名时运行命令替换。

(此外,grep | awk管道几乎总是可以awk单独使用来实现。)

(我还想知道您是否可以使用该选项来省去awk和循环--filters;也许docker rmi -f $(docker images -q -f "dangling=true")?)