Se verificar automaticamente o código de retorno:
if (darcs show repo); then
echo "repo exists"
else
echo "repo does not exist"
fi
Você também pode executar o comando e usar & & (AND lógico) ou || (OR lógica) depois para verificar se foi bem sucedido ou não:
darcs show repo && echo "repo exists"
darcs show repo || echo "repo does not exist"
Redirecionar stdout
e stderr
pode ser feito uma vez com exec
exec 6>&1
exec 7>&2
exec >/dev/null 2>&1
if (darcs show repo); then
repo="darcs"
elif (test -d .git); then
repo="git"
fi
# The user won't see this
echo "You can't see my $repo"
exec 1>&6 6>&-
exec 2>&7 7>&-
# The user will see this
echo "You have $repo installed"
Os dois primeiros exec
estão salvando os descritores de arquivos stdin
e stderr
, o terceiro redireciona ambos para /dev/null
(ou algum outro lugar, se desejado).
Os dois últimos exec
restauram os descritores de arquivo novamente.
Tudo no meio é redirecionado para lugar nenhum.
Anexe outras verificações de reporte como sugerido por Gilles.