tag run remove hub delete container docker zsh

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}}'' "$@" }