Evite que un sub command exija para siempre la input del usuario

Estoy escribiendo un guión de implementación simple para nuestro código en bash. Actualmente tengo un código como el siguiente, que funciona bien normalmente. Si por alguna razón falla la authentication (como la contraseña se cambia pero no se modifica en este script), el command svn le pedirá una contraseña. Como esto se ejecuta a través de un sistema automatizado, nunca será visto por alguien.

¿Cómo puedo hacer que svn devuelva un código de error que no sea 0 en la falla de authentication en lugar de simplemente esperar para siempre (o mientras lo deje tan lejos) para la input?

El fragment de código es:

 if eval "svn update --username xxxxxxx --password xxxxxxx"; then echo "Updated from SVN ok" else echo "Update from SVN failed" exit 1 fi # Do more stuff here as update was ok 

Obviamente, el nombre de usuario / contraseña real ha sido reemplazado por xxxxx.

Si la contraseña es incorrecta, este es el resultado del command svn:

 Updating '.': Authentication realm: <https://xxxxxxxxxxx:443> SVN Username: 

Aprecio tu ayuda.

Creo que la opción no --non-interactive puede ser lo que estás buscando.

Desde la salida de svn help update :

 Global options: <skipped a few items here> --non-interactive : do no interactive prompting 

No estoy 100% seguro, pero parece que con esta opción, si se requiere una contraseña de authentication, svn simplemente fallará con un código de salida distinto de cero.

Creo que la eval es innecesaria (y generalmente desalentada por razones de security).

No sé svn bien, pero vale la pena probar las opciones --quiet o– --quiet para ver si evitará volver a pedir el nombre de usuario / contraseña:

 if svn update --force --username xxxxxxx --password xxxxxxx; then 

o

 if svn update --quiet --username xxxxxxx --password xxxxxxx; then 

En su defecto, si tienes una versión reciente de coreutils de GNU (supongo que estás en Linux ), puedes usar el command de time de espera:

 timeout 5 svn update --username xxxxxxx --password xxxxxxx if (( $? != 124 )); then echo "Updated from SVN ok" else echo "Update from SVN timed out after 5 seconds" exit 1 fi 

Para las herramientas que carecen de una opción de línea de command, puede networkingirigir la input estándar, por lo que en realidad no intentan leer desde una console (de locking):

 svn </dev/null update --username xxxxxxx --password xxxxxxx