问题描述
我有以下工作正常的Unix命令:
docker container stop $(docker container ls -a | awk 'NR>1 {print $1}')
我想将其分配给别名,例如sc
(停止容器),但是此命令不起作用:
alias sc="docker container stop $(docker container ls -a | awk 'NR>1 {print $1}')"
似乎该表达式在将其添加到别名而不只是分配它时以某种方式求值。
我如何使其工作?
---更新---
此命令也可以很好地用作命令:
docker container ls -a | awk 'NR>1 {print $1}' | xargs docker container stop
结果:
49b947bb6d61
cb25909f1d58
99bd5a3690c8
147f554934c8
但是如果我将其分配给别名不起作用:
alias sc="docker container ls -a | awk 'NR>1 {print $1}' | xargs docker container stop"
结果:
49b947bb6d61
weblogic-admin-server
cb25909f1d58
oracle-db
99bd5a3690c8
weblogic-managed-server-1
147f554934c8
weblogic-managed-server-2
Error response from daemon: No such container: xxxxxxxxxxxxxxxxxx
Error response from daemon: No such container: bin/sh -c '$ORACLE…
Error response from daemon: No such container: 46
Error response from daemon: No such container: hours
Error response from daemon: No such container: ago
Error response from daemon: No such container: Exited
Error response from daemon: No such container: (137)
Error response from daemon: No such container: 45
Error response from daemon: No such container: hours
Error response from daemon: No such container: ago
解决方法
您真的应该使用一个函数:
sc() { docker container stop $(docker container ls -a | awk 'NR>1 {print $1}'); }
但是您也可以通过摆脱awk来简化别名的构造:
alias sc='docker container stop $(docker container ls -a -q)'
,
您需要对$
文件中的.bashrc
进行转义
尝试一下:
alias sc="docker container stop \$(docker container ls -a | awk 'NR>1 {print \$1}')"
或
alias sc="docker container stop \$(docker container ls -aq)"