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