Como posso criar um script condicional Bash, baseado na saída de um comando?

3

Eu tenho um programa em Java que recebe dois argumentos (um nome de arquivo de vídeo e uma imagem) e gera um booleano (0 ou 1) na primeira linha:

java -jar myProgram video1.mp4 image.png
> 0
>some extra information...
>other extra information....going on

Agora usando script bash, eu preciso percorrer todos os arquivos em uma pasta (não arquivos em pastas aninhadas), executar o programa com o nome do arquivo passado para o primeiro argumento (o nome do vídeo muda toda vez e a imagem é corrigida) e se a saída na primeira linha for 0, copie o arquivo em folder0 e, se a saída for 1, copie o arquivo para folder1 .

Como posso conseguir isso no bash?

    
por Tina J 06.12.2017 / 22:57

2 respostas

3

Você tem um controle muito melhor ao usar instruções condicionais:

for file in *; do
   if [[ -f "$file" ]]; then
      output=$(java -jar myProgram "$file" image.png | head -n 1)
      [[ $output = "0" ]] && cp -- "$file" folder0
      [[ $output = "1" ]] && cp -- "$file" folder1
   fi
done

EDITAR: se você ainda quiser ver a saída de java , você pode usar isto:

output=$(java -jar myProgram "$file" image.png | tee /dev/tty | head -n 1)
    
por 06.12.2017 / 23:05
2

Algo como:

for f in source/*
do
    cp "$f" folder$(java -jar myProgram "$f" image.png | head -1)
done
    
por 06.12.2017 / 23:10