$_
funcionará em (pelo menos) interativo dash
, bash
, zsh
, ksh
(embora aparentemente não em uma declaração condicional conforme solicitado) e mksh
shells. Desses - que eu saiba - somente bash
e zsh
também o preencherão em um shell com script. Não é um parâmetro POSIX - mas é bastante portátil para qualquer shell moderno e interativo.
Para uma solução mais portátil, você pode fazer:
command -p sudo ...
eval '[ "$?" = 127 ] || exit '"$?"
O que basicamente permite expandir o valor inicial de $?
para o final do script antes mesmo de testar seu valor.
Mas de qualquer forma, desde que você pareça estar testando se o comando sudo
pode ou não ser encontrado na string de -p
caminho portátil do shell com command
, eu acho que você poderia ir um pouco mais diretamente. Além disso, só para ficar claro, command
não irá testar a localização de quaisquer argumentos para sudo
- então é apenas sudo
- e nada invoca - o que é relevante para esse valor de retorno.
E mesmo assim, se é isso que você está tentando fazer:
command -pv sudo >/dev/null || handle_it
command -p sudo something or another
... funcionaria muito bem como um teste sem qualquer chance de erros no comando sudo
runs retornando de tal forma que poderia distorcer os resultados do seu teste.