Nombre del command Bash prefix para subcommands

¿Existe una forma incorporada para especificar implícitamente un nombre de command prefijado para cualquier subcommand en Bash?

Por ejemplo, git tiene varios subcommands, como status , branch , log , merge , commit , etc., por lo que me gustaría poder hacer algo así como;

 export BASH_???=git # assume there is a variable or something to change Bash's built-in behavior temporarily status # instead of `git status` branch # instead of `git branch` ... 

PD: conozco https://github.com/thoughtbot/gitsh , https://github.com/rtomayko/git-sh , https://github.com/caglar/gitsh y https: // github. com / defunkt / repl ; pero esos proyectos "envuelven" el command git o cualquier command sin respetar la configuration del usuario (como PS1 o PROMPT_COMMAND , etc.)

Lo más cercano que creo que podrías hacer para tener esto sería usar command_not_found_handle (bash 4+) para hacer esta indirección en tus "sesiones" de git.

Algo así aproximadamente (sin probar):

 command_not_found_handle() { if ! PAGER=cat git "$1" --help >/dev/null 2>&1; then return $? fi git "$@" } 

Teniendo en count los problemas del espacio de nombres discutidos en los comentarios, crearía alias explícitos para los subcommands de git seleccionados. Para eso puedes usar estas funciones bash

 declare -a GITABBREVIATIONS=( status branch log merge commit ) function git_alias_init() { for cmd in "${GITABBREVIATIONS[@]}"; do alias "$cmd"='git '"$cmd" done } function git_alias_end() { for cmd in "${GITABBREVIATIONS[@]}"; do unalias "$cmd" done } 

que tienes que pegar en tu .bashrc (o alternativamente fuente con source git-abbreviations.sh ). Entonces puede comenzar su session (alias) con

 $ git_alias_init 

y terminar con

 $ git_alias_end 

Para los loggings, aquí hay un enfoque alternativo que podría ayudar a quien esté interesado en el futuro.

La idea es implementar algún tipo de function bash previa al preexec que se ejecute antes de cada command para que pueda implementar su propio command y aceptar / rechazar commands o cambios, etc.

Echale un vistazo.