Como executar o comando em background com a instrução case no bash?

0

Estou com problemas: meu script não funciona como esperado:)

Parte do meu código:

readarray operations < operations.list
### lalala
for ((i=0; i<${#operations[@]}; i++)); do
    echo "Perform ${operations[$i]}"
    case ${operations[$i]} in
            "dog rex" )
                    command1 & ;;
            "cat sam" )
                    command2 & ;;
            * )
                    command3 ;;
    esac
done

O arquivo operations.list se parece com

 dog rex
 cat sam
 frog mike
 monster jack

Espero que command1 , command2 e command3 seja executado em segundo plano, mas não é. O que eu faço de errado?

Obrigado antecipadamente e desculpe pelo meu inglês:)

    
por HeroFromEarth 01.11.2016 / 13:12

1 resposta

1

Não funciona porque os elementos da sua matriz são cão \ n cat \ n, sapo \ n, monstro \ n . Então, sua declaração case deve ser:

case ${operations[$i]} in
        dog\n)
                echo "Step dog" & wait ;;
        cat\n)
                echo "Step cat" & wait ;;
        *)
                echo "Step all else" &  wait ;;
esac

Estritamente falando, acho que é uma má idéia desconsiderar a possibilidade de que uma alma inocente tenha deixado um ou dois espaços após cada entrada, de modo que eu prefira usar:

case ${operations[$i]} in
        dog*)
                echo "Step dog" & wait ;;
        cat*)
                echo "Step cat" & wait ;;
        *)
                echo "Step all else" &  wait ;;
esac

mas depois, YMMV.

    
por 01.11.2016 / 13:59