我正在使用bats來測驗一些 bash 腳本。在其中一項測驗中,我需要掛載生成的 iso 磁盤映像并對其內容進行斷言。
當我嘗試在測驗后立即卸載磁盤映像時,我會收到Device or resource busy錯誤訊息,除非我在卸載操作之前插入睡眠時間。
腳本如下所示:
setup() {
load 'test_helper/bats-support/load'
load 'test_helper/bats-assert/load'
}
teardown() {
if [ -f "$BATS_TEST_TMPDIR"/mnt/my_file.txt ]; then
sleep 1
fusermount -u "$BATS_TEST_TMPDIR"/mnt
fi
}
@test 'check iso content' {
generate_iso "$BATS_TEST_TMPDIR"/my_iso.iso
mkdir "$BATS_TEST_TMPDIR"/mnt
fuseiso "$BATS_TEST_TMPDIR"/my_iso.iso "$BATS_TEST_TMPDIR"/mnt
assert grep 'A required string' < "$BATS_TEST_TMPDIR"/mnt/my_file.txt
}
這在某種程度上可行,但我對任意睡眠時間不是 100% 滿意,這可能足以或可能不足以使卸載成功,具體取決于檔案關閉的時間。
我試圖通過使用fuser -mk "$BATS_TEST_TMPDIR"/mnt而不是休眠來終止訪問已安裝檔案系統的行程,但這最終會終止運行測驗的行程。
有什么辦法可以避免任意睡眠時間?我可以要求作業系統在繼續之前等待檔案關閉嗎?任何幫助將不勝感激。
uj5u.com熱心網友回復:
這實際上非常簡單,我只需要在最后關閉檔案grep(注意<&-):
assert grep 'A required string' <&- "$BATS_TEST_TMPDIR"/mnt/my_file.txt
teardown() {
if [ -f "$BATS_TEST_TMPDIR"/mnt/my_file.txt ]; then
fusermount -u "$BATS_TEST_TMPDIR"/mnt
fi
}
@test 'check iso content' {
generate_iso "$BATS_TEST_TMPDIR"/my_iso.iso
mkdir "$BATS_TEST_TMPDIR"/mnt
fuseiso "$BATS_TEST_TMPDIR"/my_iso.iso "$BATS_TEST_TMPDIR"/mnt
assert grep 'A required string' <&- "$BATS_TEST_TMPDIR"/mnt/my_file.txt
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/413735.html
標籤:
上一篇:如何在不知道電子郵件地址的情況下按CSV中的電子郵件分組?
下一篇:搜索和重命名檔案
