Bash - 如何检查命令是否没有输出而不打印它?

Mys*_*uff 0 bash

我正在编写一个测试脚本。它使用作为输入传递的 *.in 文件执行程序,并使用diff命令将其输出与 *.out 文件进行比较。

但是,我不想打印diff输出,而是检查是否有,如果有,则将 *.in 文件名添加到失败测试列表中。

问题是我不知道如何检查命令是否产生输出而不打印它。

我现在的脚本:

failed_tests=""

for filename in $directory/*.in; do

    command=< ${filename} ./${program} | diff - ${filename%.in}.out

    # Check if command produces output.
    if command; then
        # Add filename to failed tests list.
        failed_tests="${failed_tests} ${filename}"
    fi

done

echo $failed_tests
Run Code Online (Sandbox Code Playgroud)

预先感谢您的所有答案。

Unw*_*ble 5

您的方法是可行的,但是您必须在 `` 或 中捕获 $command $(),另外, $filename 应该充当输入,但不重定向其内容。顺便说一句,您可能想要删除变量中的大括号,只要相邻字符不是分隔符,它就应该有效,例如 _

command=$(./$program $filename | diff - -q $filename%.in.out)
Run Code Online (Sandbox Code Playgroud)

-qdiff 中的选项表示仅在 .out 不同时报告。if不带方括号仅适用于具有退出状态的程序或命令。例如 grep

if [[ -n $command ]]; then
    # Add filename to failed tests list.
    failed_tests="$failed_tests $filename"
fi
Run Code Online (Sandbox Code Playgroud)

-n选项表示不为空

最后,在循环之外采用相同的方法:

if [[ -n $failed_tests ]]; then
    #do something here
fi
Run Code Online (Sandbox Code Playgroud)