Você pode definir uma função bash com o mesmo nome de um executável e fazer com que ela processe seu parâmetro adicional e chame a função original sem ambiguidade usando o command
builtin. De man bash
:
command [-pVv] command [arg ...]
Run command with args suppressing the normal shell function
lookup. Only builtin commands or commands found in the PATH are
executed.
Para ilustrar,
function ls() {
case "$1" in
"foo") shift
echo "do new thing with remaining args: $@"
;;
*) command ls "$@"
;;
esac
}
Então
$ ls -ltr --color=always
total 12
drwxrwxr-x 2 steeldriver steeldriver 4096 Sep 17 08:16 subdir1
drwxrwxr-x 2 steeldriver steeldriver 4096 Sep 17 08:17 subdir2
drwxrwxr-x 2 steeldriver steeldriver 4096 Sep 17 08:17 subdir3
funciona normalmente, enquanto
$ ls foo -ltr --color=always
do new thing with remaining args: -ltr --color=always
(você pode precisar do comando unalias
the ls
para tentar fazer isso).
Obviamente, uma implementação do mundo real deve fazer uma verificação de erros adequada - talvez usando getopts
para processar toda a linha de comando em vez de um simples switch / case em $1
.
Como alternativa (e mais tradicional), você pode conseguir o mesmo escrevendo um script de wrapper e colocando-o em algum lugar anterior ao seu $PATH
do que o executável original (como /usr/local/bin
ou% código%). Dentro do wrapper, consulte o executável original por seu caminho absoluto.