Você pode usar todos os 3 idiomas. Eu recomendaria ver como svn, hg, git, docker o fazem.
Eles terão um comando wrapper: por exemplo, dbinv .
Ele examinará seu primeiro argumento e, em seguida, chamará um script auxiliar. por exemplo, dbinv show arg1 , chamará «directory-containing-dbinv-commands»/dbinv-show arg1 .
Esse wrapper pode ser feito facilmente no bash. Os subcomandos podem ser feitos em outros idiomas (use #! no topo de um script para especificar o idioma).
Para fazer o wrapper, pesquise "$1" , "$@" , shift e exec (não tão importante).