gpt4 book ai didi

docker - 我可以给子命令起别名吗? (缩短 `docker ps` 的输出)

转载 作者:IT老高 更新时间:2023-10-28 21:22:19 26 4
gpt4 key购买 nike

docker 命令有一个 ps 子命令,会发出很长的行:

$ 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

可以指示只输出特定的列:

docker ps --format "table {{.Image}}\t{{.Names}}\t{{.Ports}}\t{{.Status}}"

我希望能够说 docker ps 并为我添加 --format "table..." 参数。有没有很好的方法来做到这一点?

我知道我可以说

alias dp='docker ps --format ...'

但我更愿意保留子命令。

我使用 zsh 作为我的 shell。

最佳答案

您可以将 docker 包装在一个检查特定子命令并传递所有其他命令的函数中。 (下面的内容实际上不仅适用于 zsh,还适用于任何符合 POSIX 的 shell —— zsh 不完全属于的类别)。

docker() {
case $1 in
ps)
shift
command docker ps --format 'table {{.Image}}\t{{.Names}}\t{{.Ports}}\t{{.Status}}' "$@"
;;
*)
command docker "$@";;
esac
}

如果您想要一个更通用的包装函数(不需要了解您特定的所需 ps 逻辑),可以按如下方式完成(请注意,此版本 不是 与基线 POSIX sh 兼容,因为它使用 local;然而,这是一个扩展,甚至由 ash 及其衍生产品实现):

docker() {
local cmd=$1; shift
if command -v "docker_$cmd" >/dev/null 2>/dev/null; then
"docker_$cmd" "$@"
else
command docker "$cmd" "$@"
fi
}

...之后任何子命令都可以定义自己的函数,而无需修改包装器以了解它们(您也可以在名为 docker_ps 的 PATH 中创建一个脚本,或提供以您选择的任何其他方式执行命令):

docker_ps() {
command docker ps --format 'table {{.Image}}\t{{.Names}}\t{{.Ports}}\t{{.Status}}' "$@"
}

关于docker - 我可以给子命令起别名吗? (缩短 `docker ps` 的输出),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34748747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com