La secuencia de commands Bash detiene la ejecución en la request de contraseña

Tengo algunos repositorys Git que necesito actualizar regularmente. Así que escribí un script bash tan simple como

cd /repo1/path git fetch --all cd /repo2/path git fetch --all ... 

Este script se ejecuta a través de un trabajo cron. La autorización en Git se realiza a través de SSH. El problema aquí es que de vez en cuando uno u otro repository rechaza el certificate y, por lo tanto, solicita una contraseña (este es un problema de gestión de repos que no se aborda en la pregunta). Una vez que mi script se encuentra con un repository de este tipo, simplemente se detiene y (supongo) espera la input de la contraseña, por lo que no se actualizan todos los repos que lo siguen.

La pregunta es cómo manejar tales situaciones: un repository fallido no debe evitar que otros se actualicen.

Podría usar algo como esto.

Para este ejemplo, he usado sleep en lugar de git para mostrar cómo funciona mejor

 #!/bin/bash PIDS=() # Make pid array cd /repo1/path #Go to dir sleep 20 & #Command x=$! #Save Pid PIDS+=($x) #Add to pid array Command[$x]="$(pwd)" # Add to Command array(will contain failed dirs) cd /repo1/path #Same yo sleep 20 & x=$! PIDS+=($x) Command[$x]="$(pwd)" cd /repo3/path sleep 1 & #This one will exit before next part to show it doesn't #appear in output x=$! PIDS+=($x) Command[$x]="$(pwd)" sleep 2 # Literally here just so previous command finishes #(not needed in a real script) for i in "${PIDS[@]}";do #Loop through the PIDS if ps -ef | grep -v "grep" | grep "$i" > /dev/null 2>&1 ;then #Check they're running, dump output kill "$i" #Kill running ones wait "$i" 2>/dev/null # Suppress output echo "${Command[${i}]}" Failed # echo failed dirs fi done 

Salida

 /repo1/path Failed /repo2/path Failed