Se você estiver disposto a perder os recursos padrão de comando não encontrado (que procuram pacotes fornecendo o comando etc.), defina uma função command_not_found_handle
que testa se uma versão .exe
está disponível no PATH
:
command_not_found_handle ()
{
if command -v "".exe; then
"".exe "${@:2}";
return $?;
else
return 127;
fi
}
Por exemplo, teste com sh
em vez de .exe
:
$ z
z: command not found
$ command_not_found_handle () { if command -v ""sh; then ""sh "${@:2}"; return $?; else return 127; fi; }
$ z -c 'echo "$@"' _ b c
/usr/bin/zsh
b c
$ ba -c 'echo "$@"' _ b c
/bin/bash
b c
É claro que isso depende de como o WSL está se conectando ao bash para fornecer acesso aos comandos do Windows (se o WSL estiver usando Testado no WSL funciona. command_not_found_handle
, isso não funcionará).
A definição original, padrão, de command_not_found_handle
está em /etc/bash.bashrc
:
$ tail -15 /etc/bash.bashrc
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/command-not-found ]; then
function command_not_found_handle {
# check because c-n-f could've been removed in the meantime
if [ -x /usr/lib/command-not-found ]; then
/usr/lib/command-not-found -- ""
return $?
elif [ -x /usr/share/command-not-found/command-not-found ]; then
/usr/share/command-not-found/command-not-found -- ""
return $?
else
printf "%s: command not found\n" "" >&2
return 127
fi
}
fi
Você pode simplesmente incluir esse código no redifinition:
command_not_found_handle ()
{
if command -v "".exe; then
"".exe "${@:2}";
return $?;
else
# check because c-n-f could've been removed in the meantime
if [ -x /usr/lib/command-not-found ]; then
/usr/lib/command-not-found -- ""
return $?
elif [ -x /usr/share/command-not-found/command-not-found ]; then
/usr/share/command-not-found/command-not-found -- ""
return $?
else
printf "%s: command not found\n" "" >&2
return 127
fi
fi
}
Ou use este truque para inserir automaticamente a definição antiga:
eval "original_$(declare -f command_not_found_handle)"
command_not_found_handle () {
if command -v "".exe; then
"".exe "${@:2}";
return $?;
else
original_command_not_found_handle "$@"
fi
}