[[ … ]]
avalia uma expressão condicional . Em uma expressão condicional, -z
é um operador que recebe uma string como argumento e retorna true se a string estiver vazia e, caso contrário, false.
Em for ((…; …; …))
, cada uma das três partes separadas por ponto-e-vírgula dentro dos parênteses duplos é um expressão aritmética . Em uma expressão aritmética, -
é o operador de negação ou subtração. z
é uma referência para a variável z
, avaliando para 0 se a variável não estiver definida. Portanto, quando a saída de lsof -i4TCP:8083 -sTCP:LISTEN -t
estiver vazia e z
não estiver definida, a expressão será avaliada como 0, portanto, o loop será encerrado. Quando a saída não está vazia, é provável que resulte em um erro de sintaxe na expressão aritmética. O que você escreveu simplesmente não faz sentido em uma expressão aritmética.
Esta forma de for
é projetada para iterações determinadas pela aritmética, normalmente contando de algum valor inicial para algum valor final. Você parece querer um loop while, então escreva um loop while e use uma expressão condicional.
while [[ -z $(lsof -i4TCP:8083 -sTCP:LISTEN -t) ]]; do
echo "waiting for startup"
sleep 1
done
Veja também parênteses, colchetes e chaves no bash .