경로 사양 및 출력 비교에 대한 혼란

경로 사양 및 출력 비교에 대한 혼란

기본적으로 저는 일련의 테스트를 생성하고 이를 실행하고, 테스트를 실행한 다음, 미리 만들어진 출력 파일에서 얻은 테스트와 비교하고 싶습니다.

지금까지 나는 이것을 얻었습니다

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.

어쨌든 이것은 여러 수준에서 근본적으로 잘못된 것일 수 있지만 저는 쉘을 처음 사용하므로 이해를 높이는 데 매우 도움이 될 것입니다.

답변1

returned=$?STDOUT은 에 저장되지 않습니다 returned. 이는 마지막으로 실행된 명령의 종료 코드를 저장합니다 ./myexec "$file".

./tests/"$file".output예상된 결과가 유지된다고 가정하면 예를 들어 다음과 같습니다.

# 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)" 

관련 정보