Terminal 别名zsh:do';

Terminal 别名zsh:do';,terminal,alias,zsh,parse-error,Terminal,Alias,Zsh,Parse Error,我面临着zsh的别名问题 我在我的.zprofile文件中有这个别名:alias cleanimg=“for I in`docker images|grep'| awk'{print$3}`;do;docker rmi-f$I;done” 当从我的终端运行cleanimg时,我得到了这个错误:zsh:parse error靠近'do' 我试图删除紧跟在do关键字之后,但它没有解决问题。 但是,如果直接从终端执行代码,则该别名可以正确运行 有人能帮我解决这个语法错误吗 提前感谢。您的for循环中有

我面临着
zsh
的别名问题

我在我的
.zprofile
文件中有这个别名:
alias cleanimg=“for I in`docker images|grep'| awk'{print$3}`;do;docker rmi-f$I;done”

当从我的终端运行
cleanimg
时,我得到了这个错误:
zsh:parse error靠近'do'

我试图删除
紧跟在
do
关键字之后,但它没有解决问题。 但是,如果直接从终端执行代码,则该别名可以正确运行

有人能帮我解决这个语法错误吗


提前感谢。

您的for循环中有一个额外的分号,只需将其改为-

alias cleanimg=“对于docker images中的i | grep'| awk'{print$3}'
;do docker rmi-f$i;done”
不要尝试为此使用别名;使用函数

cleanimg () {
  for i in $(docker images | awk '/<none>/ {print $3}'); do
    docker rmi -f "$i"
  done
}
cleanimg(){
对于$(docker images | awk'/{print$3}')中的i,请执行
docker rmi-f“$i”
完成
}
这样,您就不必获得正确的引号,以便在使用别名时而不是在定义别名时运行命令替换

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


(我还想知道您是否可以取消
awk
和使用
--filters
选项的循环;也许
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”
返回要删除的所有id,并且由于
docker rmi
接受参数,您可以直接传递参数

而无需额外的
也不会造成伤害,删除它也不会解决问题。您好,谢谢您的回答!我在
.zshrc
中粘贴了您的函数,重新启动了shell,得到了以下错误:
.zshrc:29:parse error靠近'done'
第二个
done
似乎触发了语法问题。有什么想法吗?我想这是一个打字错误,
docker rmi
行上的
done
是不需要的(for;do;done)是的,不确定我怎么会得到两个
done
s。可能是复制了第一个,但没有注意到它在那里,所以我自己打了。