我有一個命令應該失敗并輸出特定的回聲。
如果用戶提交:
./submit_script.sh path/1/to/file1 path/2/to/file2 --bat
然后
- 腳本應該失敗
- 回聲
"Unrecognized argument. Possible arguments: cat, dog, human"。
我試圖將此回聲保存在一個變數中,以便運行一個簡單的測驗用例。基本上:當用戶運行包含測驗用例的腳本時(見下面我的策略)
./test_script.sh
然后他們收到回聲,說明: "Unrecognized argument test case: pass"
我的策略(我已經嘗試過這些以及我能想到的每一個小的變化):
1) 輸入: test_script.sh 在將 submit_script.sh 檔案的輸出保存到變數中時包含“echo”。
輸出: 運行 ./test_script.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) 輸入: test_script.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) 輸入: test_script.sh在將submit_script.sh檔案的輸出保存到變數中時包含">/dev/null 2>&1"
輸出: 運行 ./test_script.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) 輸入: test_script.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) *輸入: test_script.sh在 if 陳述句中的正則運算式命令中添加's
輸出: 回聲"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 陳述句不會觸發回聲,說明““無法識別的引數測驗用例:通過”。想法?如果我需要澄清,請告訴我。
uj5u.com熱心網友回復:
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
uj5u.com熱心網友回復:
好的,所以我很確定無法解決我的問題,因為 bash 是如何處理字串的。即回聲輸出Unrecognized argument. Possible arguments: cat, dog, human不是"Unrecognized argument. Possible arguments: cat, dog, human"。
我最終做的是使用 exit 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 處理字串的方式嗎?還是我錯過了其他東西?
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/342443.html
