Confusão sobre especificação de caminho e comparação de saída

0
Basicamente eu criei um conjunto de testes, que eu quero percorrer, executar o teste e, em seguida, compará-los com o que eu tenho dos meus arquivos de saída feitos antes.

Até agora eu tenho isso

for file in ./tests/*.test; do
# Now I'm unsure how can I get the output of a file stored in a variable.
# I did this, but I'm unsure whether it's correct
./myexec "$file"
returned=$?
# So if my understanding is correct, this should run my desired test and store STDOUT
# Next I want to compare it to what I have inside my output file
compared="$(diff returned ./tests/"$file".output)"
if [ -z $compared ]; then
   echo "Test was successful"
   passed=$((passed + 1))
else
   echo "Test was unsuccessful, got $ret but expected ./tests/"$file".output")
   failed=$((failed + 1))
# I presume that one above is an incorrect way to print out the expected result
# But I couldn't really think of anything better.

De qualquer maneira, isso provavelmente é fundamentalmente errado em vários níveis, mas eu sou novo no shell, então isso seria muito útil para eu melhorar minha compreensão

    
por Rawrplus 05.12.2016 / 03:11

1 resposta

0

returned=$? não armazena STDOUT para returned . Ele armazena o código de saída do último comando executado, ou seja, ./myexec "$file" .

Assumindo que ./tests/"$file".output tenha o resultado esperado, o que você quer dizer é por exemplo:

# first assign the value properly using the command substitution
return=$(./myexec $file)

# Then compare using process substitution, as diff demands a file to compare.
## And the process  substitution passes diff the file descriptor of its STDOUT.
compared="$(diff <(echo "$returned") ./tests/"$file".output)" 
    
por 05.12.2016 / 11:14