别名 zsh: `do' 附近的解析错误

alias zsh: parse error near `do'

我遇到了 zsh.

的别名问题

我的 .zprofile 文件中有这个别名:alias cleanimg="for i in `docker images | grep '<none>' | awk '{print }'`; do; docker rmi -f $i; done".

当我的终端 运行 cleanimg 出现此错误时:zsh: parse error near `do'.

我试图删除 do 关键字后的 ;,但没有解决问题。 但是,如果我直接从终端执行代码,该别名将正确运行。

谁能帮我解决这个语法错误?

提前致谢。

你的for循环中多了一个分号,修改为-
alias cleanimg="for i indocker 张图片 | grep '' | awk '{print $3}'; do docker rmi -f $i; done"

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

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

这使您不必获得正确的引用,以便命令替换在 used 别名而不是 defined[=] 时运行26=].

(此外,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")'

子命令 docker images -q -f "dangling=true" return 删除所有你的 id 因为 docker rmi 接受参数你可以直接传递它们