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

问题描述

我有以下工作正常的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)"