ZSH 别名与多个命令给出“未找到命令”

ZSH 别名与多个命令给出“未找到命令”

我正在使用这一系列命令来构建和运行 docker 容器。这些命令与 结合使用时会&&给出如下输出:

> docker stop $(docker ps -a -q  --filter ancestor=redoc1) && docker build -t redoc1 . && docker run  -p 8070:80 -d redoc1 
4127c16715e8
3995f290bcf3
60cacd2d669b
7e509bd0f443
69e186743360
1caad359f950
Sending build context to Docker daemon  113.7kB
Step 1/2 : FROM redocly/redoc:v2.0.0-rc.18
 ---> 262cf1bbd824
Step 2/2 : COPY config/docker/index.tpl.html /usr/share/nginx/html/index.html
 ---> Using cache
 ---> a8b03c1555c5
Successfully built a8b03c1555c5
Successfully tagged redoc1:latest
183bd1af2d61968e67c6b0eec27d24a5892851ddc15b41bc155b8335de83f0ac

我正在使用 Z Shell,通常会为这些重复的命令集设置别名。到目前为止,都是成功的。

我在中创建了以下内容~/.zshrc

alias redocly-local-deploy="docker stop $(docker ps -a -q  --filter ancestor=redoc1) && docker build -t redoc1 . && docker run  -p 8070:80 -d redoc1"

它与上面的命令完全相同,可直接在 shell 中运行。

但是在运行别名时(重新加载 zshrc 后),它在第一个(或第二个?)命令后失败:

> redocly-local-deploy 
4127c16715e8
zsh: command not found: 3995f290bcf3
zsh: command not found: 60cacd2d669b
zsh: command not found: 7e509bd0f443
zsh: command not found: 69e186743360
zsh: command not found: 1caad359f950

看起来输出第一个命令的执行结果与此相反。我尝试添加> /dev/null第一个命令,但结果相同。

感谢任何帮助!

答案1

根据@steeldriver 的评论回答我自己的问题。

$(docker ps -a -q --filter ancestor=redoc1)在加载别名时(因为外面有双引号)而不是在运行时进行评估,这是导致问题的原因。

简单的解决方法是将双引号替换为单引号。

相关内容