使用 $(...) 创建 Unix 别名不起作用

Create a Unix alias with $(...) does not work

我有以下有效的 Unix 命令:

docker container stop $(docker container ls -a | awk 'NR>1 {print }')

我想将其分配给别名,例如 sc(停止容器),但此命令不起作用:

alias sc="docker container stop $(docker container ls -a | awk 'NR>1 {print }')"

似乎在将表达式添加到别名而不是仅仅赋值时以某种方式计算表达式。

我怎样才能让它发挥作用?

---更新---

此命令也可以作为命令正常工作:

docker container ls -a | awk 'NR>1 {print }' | xargs docker container stop

结果:

49b947bb6d61
cb25909f1d58
99bd5a3690c8
147f554934c8

但是如果我将它分配给别名不起作用:

alias sc="docker container ls -a | awk 'NR>1 {print }' | 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

您需要转义 .bashrc 文件中的 $

试试这个:

alias sc="docker container stop $(docker container ls -a | awk 'NR>1 {print $1}')"

alias sc="docker container stop $(docker container ls -aq)"

你真的应该使用一个函数:

sc() { docker container stop $(docker container ls -a | awk 'NR>1 {print }'); }

但是您也可以通过去掉 awk 来简化别名的构造:

alias sc='docker container stop $(docker container ls -a -q)'