Tente:
su $USER -c true
E, em seguida, teste o valor de retorno em $ ?. Por exemplo:
echo "Really delete everything? Enter your password to confirm:"
su $USER -c true && rm -rf $HOME
O true
está lá apenas como não operacional.
Para suprimir a saída do su, você pode redirecionar o stderr:
echo -n "Enter password for $USER:"
su $USER -c true 2>/dev/null && echo -e "\nsuccess" || echo -e "\nfailure"
Você não pode omitir o parâmetro -c [command], pois isso criará uma nova instância interativa do bash (se você agrupá-lo em subshells ou não):
$ ((su $USER ) && echo ok) ; echo "exit status:$?"
Password:
$ echo $SHLVL
2
$ exit
ok
exit status:0
$ echo $SHLVL
1
Então, o exemplo nos comentários abaixo:
((su $USER >/dev/null 2>&1) && echo ok) || echo no
não exibiu nada (a menos que a autenticação de segurança tenha falhado) porque com uma senha correta você está trabalhando em um shell aninhado (com toda a saída de tela redirecionada). Pressione CTRL-D (para sair do shell) e você verá "ok" ecoado.