我有一個我想用shUnit測試的shell腳本。腳本(和所有功能)都在一個文件中,因爲它使安裝變得更加容易。從shell腳本導入函數
示例script.sh
#!/bin/sh
foo() { ... }
bar() { ... }
code
我想寫的第二文件(這並不需要被分發和安裝)來測試在script.sh
定義的函數
喜歡的東西run_tests.sh
#!/bin/sh
. script.sh
# Unit tests
現在問題出在.
(或source
在Bash)。它不僅解析函數定義,而且還執行腳本中的代碼。
由於不帶參數的腳本做什麼不好我可以
. script.sh > /dev/null 2>&1
,但我徘徊,如果有更好的方式來實現我的目標。
編輯
我提出的解決方法不在的情況下工作,被執行的腳本調用exit
所以我必須陷阱出口
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
...
}
. script.sh
的run_tests
函數被調用,但只要我重定向源命令的輸出腳本中的功能不會被解析,並且在陷阱處理程序中不可用
這可行,但我得到了outp的script.sh
UT:
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
function_defined_in_script_sh
}
. script.sh
這不打印輸出,但我得到的功能沒有定義的錯誤:
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
function_defined_in_script_sh
}
. script.sh | grep OUTPUT_THAT_DOES_NOT_EXISTS
這不打印輸出和run_tests
陷阱處理程序不叫在所有:
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
function_defined_in_script_sh
}
. script.sh > /dev/null
到'shift'參數列表所以'main'不會取得聯繫與'--source您可能希望只有' –
@HubertGrzeskowiak好點,固定。感謝您的建議! – andrewdotn
'shift'在那裏沒有意義,因爲'main'只在'--source-only'不是**第一個參數時運行。 –