我正在使用这一系列命令来构建和运行 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)
在加载别名时(因为外面有双引号)而不是在运行时进行评估,这是导致问题的原因。
简单的解决方法是将双引号替换为单引号。