收集外部输出(echo)并保存为用于测试的变量



我有一个命令应该失败并输出特定的echo。

如果用户提交:

./submit_script.sh path/1/to/file1 path/2/to/file2 --bat

然后

  1. 脚本应该失败
  2. 回声"Unrecognized argument. Possible arguments: cat, dog, human"

我正试图将此echo保存在一个变量中,以便运行一个简单的测试用例。基本上:当用户运行包含测试用例的脚本时(参见下面的策略)

./test_script.sh

然后,他们收到一个回复:"Unrecognized argument test case: pass"

我的策略(我已经尝试了这些以及我能想到的每一个小变化):

1)输入:testrongcript.sh包含"回声;将submit_script.sh文件的输出保存到变量中时

输出:时无任何回声/testrongcript.sh运行

bat_input=$(echo ./submit_script.sh path/1/to/file1 path/2/to/file2 --bat)   
if [[ "$bat_input" =~ "Unrecognized argument. Possible arguments: cat, dog, human" ]]; then                                         
echo "Unrecognized argument test case: pass"                    
fi

2)输入:testrongcript.sh在将submit_script.sh文件的输出保存到变量中时不包括echo

输出:回声"Unrecognized argument. Possible arguments: cat, dog, human"(不是正确的回声,应为"无法识别的参数测试用例:通过")

bat_input=$(./submit_script.sh path/1/to/file1 path/2/to/file2 --bat)   
if [[ "$bat_input" =~ "Unrecognized argument. Possible arguments: cat, dog, human" ]]; then                                         
echo "Unrecognized argument test case: pass"                    
fi

3)输入:testrongcript.sh包括">dev/null2>amp;1〃;将submit_script.sh文件的输出保存到变量中时

输出:时无任何回声/testrongcript.sh运行

bat_input=$(./submit_script.sh path/1/to/file1 path/2/to/file2 --bat >/dev/null 2>&1)  
if [[ "$bat_input" =~ "Unrecognized argument. Possible arguments: cat, dog, human" ]]; then                                         
echo "Unrecognized argument test case: pass"                    
fi

4)输入:testrongcript.sh删除if语句中bat_Input变量周围的引号

输出:回声"Unrecognized argument. Possible arguments: cat, dog, human"(不是正确的回声,应为"无法识别的参数测试用例:通过")

bat_input=$(./submit_script.sh path/1/to/file1 path/2/to/file2 --bat)   
if [[ $bat_input =~ "Unrecognized argument. Possible arguments: cat, dog, human" ]]; then                                         
echo "Unrecognized argument test case: pass"                    
fi

5)*输入:testrongcript.sh将添加到if语句中的regex命令

输出:回声"Unrecognized argument. Possible arguments: cat, dog, human"(不是正确的回声,应为"无法识别的参数测试用例:通过")

bat_input=$(./submit_script.sh path/1/to/file1 path/2/to/file2 --bat)   
if [[ "$bat_input" =~ *"Unrecognized argument. Possible arguments: cat, dog, human"* ]]; then                                         
echo "Unrecognized argument test case: pass"                    
fi

在所有这些情况下;无法识别的参数。可能的论点:猫、狗、人;回声,理想情况下我想抑制它。我不明白为什么这些if语句没有触发一个回声:"无法识别的参数测试用例:pass"。想法?如果我需要澄清,请告诉我。

bat_input=$(./submit_script.sh path/1/to/file1 path/2/to/file2 --bat)   
if [[ "$bat_input" =~ "Unrecognized argument. Possible arguments: cat, dog, human" ]]; then                                         
echo "Unrecognized argument test case: pass"                    
fi

bat_input=$(./submit_script.sh path/1/to/file1 path/2/to/file2 --bat)   
if [[ $bat_input =~ "Unrecognized argument. Possible arguments: cat, dog, human" ]]; then                                         
echo "Unrecognized argument test case: pass"                    
fi

好的,所以我很确定,由于bash处理字符串的方式,解决我的问题是不可能的。即回波输出是Unrecognized argument. Possible arguments: cat, dog, human而不是"Unrecognized argument. Possible arguments: cat, dog, human"

我最终所做的是使用出口1状态作为代理。Ie:

bat_input=$(./submit_script.sh path/1/to/file1 path/2/to/file2 --bat)   
if [[ $bat_input -eq 1 ]]; then
echo "Unrecognized argument test case: pass"
fi

这并不好,因为出口1错误代码可能由于多种原因而出现,但这是我所能想到的全部。

我的问题实际上是由于bash如何处理字符串引起的吗?还是我错过了什么?

相关内容

  • 没有找到相关文章

最新更新