该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
Run Code Online (Sandbox Code Playgroud)
可以指示仅输出特定列:
docker ps --format "table {{.Image}}\t{{.Names}}\t{{.Ports}}\t{{.Status}}"
Run Code Online (Sandbox Code Playgroud)
我希望能够说出docker ps并--format "table..."为我添加论点.有一个很好的方法来做到这一点?
我知道我可以说
alias dp='docker ps --format ...'
Run Code Online (Sandbox Code Playgroud)
但我更喜欢保留子命令.
我正在使用zsh作为我的shell.
Cha*_*ffy 12
您可以包装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
}
Run Code Online (Sandbox Code Playgroud)
如果你想要一个更通用的包装器函数(不需要知道你特定的所需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
}
Run Code Online (Sandbox Code Playgroud)
...之后任何子命令都可以定义自己的函数,而不需要修改包装器以了解它们(您也可以在命名的PATH中创建脚本docker_ps,或者以您选择的任何其他方式提供命令):
docker_ps() {
command docker ps --format 'table {{.Image}}\t{{.Names}}\t{{.Ports}}\t{{.Status}}' "$@"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
852 次 |
| 最近记录: |