我有一个命令应该失败并输出特定的echo。
如果用户提交:
./submit_script.sh path/1/to/file1 path/2/to/file2 --bat
然后
- 脚本应该失败
- 回声
"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如何处理字符串引起的吗?还是我错过了什么?