run - ¿Puedo alias un subcomando?(acortando la salida de `docker ps`)
docker run (1)
El comando
docker
tiene un subcomando
ps
que emite líneas muy largas:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e8ec8a16da4 waisbrot/wait:latest "/wait" 4 minutes ago Exited (0) 4 minutes ago wait-for-janus-test
9dbf0739561f whoop/downsampler:master "./run.bash" 4 minutes ago Up 4 minutes 0.0.0.0:32855->4369/tcp, 0.0.0.0:32854->9100/tcp, 0.0.0.0:32853->9101/tcp, 0.0.0.0:32852->9102/tcp, 0.0.0.0:32851->9103/tcp, 0.0.0.0:32850->9104/tcp, 0.0.0.0:32849->9105/tcp, 0.0.0.0:32848->9106/tcp, 0.0.0.0:32847->9107/tcp, 0.0.0.0:32846->9108/tcp, 0.0.0.0:32845->9109/tcp, 0.0.0.0:32844->9110/tcp metrics-downsampler-test
6cf56623bb48 whoop/janus:master "./start.bash" 4 minutes ago Up 4 minutes 0.0.0.0:32843->80/tcp janus-test
882b50303d54 whoop/recalculator:master "./run.bash" 4 minutes ago Exited (1) 4 minutes ago internum-test
Se le puede indicar que solo muestre columnas específicas:
docker ps --format "table {{.Image}}/t{{.Names}}/t{{.Ports}}/t{{.Status}}"
Me gustaría poder decir
docker ps
y obtener el
--format "table..."
agregado para mí.
¿Hay una buena manera de hacer esto?
Sé que podría decir
alias dp=''docker ps --format ...''
pero prefiero mantener el subcomando
Estoy usando zsh como mi caparazón.
Puede ajustar
docker
en una función que verifica el subcomando específico y pasa todo lo demás.
(Lo siguiente en realidad funcionará no solo con zsh, sino con cualquier shell compatible con POSIX, una categoría a la que zsh no pertenece).
docker() {
case $1 in
ps)
shift
command docker ps --format ''table {{.Image}}/t{{.Names}}/t{{.Ports}}/t{{.Status}}'' "$@"
;;
*)
command docker "$@";;
esac
}
Si desea una función de envoltura más genérica (que no necesita saber acerca de su lógica
ps
deseada específica), puede hacerlo de la siguiente manera (tenga en cuenta que esta versión
no
es compatible con la línea de base POSIX sh debido a su uso de
local
; sin embargo , esta es una extensión implementada incluso por
ash
y sus derivados):
docker() {
local cmd=$1; shift
if command -v "docker_$cmd" >/dev/null 2>/dev/null; then
"docker_$cmd" "$@"
else
command docker "$cmd" "$@"
fi
}
... después de lo cual cualquier subcomando puede tener sus propias funciones definidas, sin que sea necesario modificar el contenedor para conocerlas (también puede crear un script en la RUTA llamado
docker_ps
, o proporcionar el comando de cualquier otra manera que elija):
docker_ps() {
command docker ps --format ''table {{.Image}}/t{{.Names}}/t{{.Ports}}/t{{.Status}}'' "$@"
}