Desejo executar uma série de testes (cada um em um PID diferente) e obter um status de sucesso somente se todos os testes forem encerrados com êxito. Algo como
check $PID1 && check $PID2 && check $PID3
mas para um número indeterminado de testes. Como posso fazer isso?
Isso não deve ser muito difícil de escrever como um loop:
Como a cadeia de comandos vinculada a
&&
, a função parará na primeira falhacheck
.Embora note que eu substituí suas variáveis
PID1
,PID2
etc. por uma única matriz. O Bash pode iterar sobre variáveis cujos nomes começam com uma string específica, mas os arrays são apenas mais convenientes. (A menos que essas variáveis venham de fora do script através do ambiente onde você não pode passar arrays apropriados.)Além disso, codifiquei o
check
comando no loop aqui. Você pode passar comandos distintos para a função ser executada, mas isso está repleto de problemas com divisão de palavras e manipulação de aspas. (Veja aqui e aqui .)Você pode colocá-lo em um subshell com exit-on-error (
-e
):Alternativamente, você pode usar
|| exit 1
em vez deset -e
:Pode ser:
Ele executará as verificações em paralelo. Substitua
soon
pornow
se desejar que as verificações em execução sejam eliminadas assim que soubermos o resultado.Se você tiver os PIDs como saída de um pipe (um por linha):
parallel
dá um valorcheck
e executa o maior númerocheck
possível em paralelo (-j0
).Se o servidor não tiver
parallel
instalado, execute isso em uma máquina que tenhaparallel
instalado:Edite
new_script
(as últimas 5 linhas) e copie o script para o servidor.Uma função simples poderia testar cada argumento; se algum falhar, retorne da função com um código diferente de zero:
Com alguns testes de exemplo: