自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

防止刪庫悲劇發(fā)生,這里有個(gè)Bash腳本測試框架,危險(xiǎn)代碼一測便知

新聞 前端
想要清理文件夾內(nèi)部分冗余文件,結(jié)果誤刪了同事剛合的代碼?

 本文經(jīng)AI新媒體量子位(公眾號(hào)ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)聯(lián)系出處。

想要清理文件夾內(nèi)部分冗余文件,結(jié)果誤刪了同事剛合的代碼?

(例如,在rm -rf /usr/bin/test的/usr后面加了個(gè)空格,結(jié)果刪掉了整個(gè)/usr文件)

相比于其他語言,Bash自帶許多令人摸不著頭腦的設(shè)計(jì),其中之一就是變量中間不能加空格。這就導(dǎo)致Bash在調(diào)試時(shí),某些命令具有危險(xiǎn)性,例如rm -rf是刪除文件夾下所有文件,一旦執(zhí)行錯(cuò)誤,可能會(huì)產(chǎn)生爆炸的效果。

現(xiàn)在,手殘黨的福音來了:GitHub上有一位朋友推出了一款Bash命令的測試框架Bach,助你檢測腳本里有沒有危險(xiǎn)的成分。

防止刪庫悲劇發(fā)生,這里有個(gè)Bash腳本測試框架,危險(xiǎn)代碼一測便知

據(jù)開發(fā)者介紹,這款框架能讓你心情平靜

只要在測試腳本中導(dǎo)入這款Bach框架,就相當(dāng)于服下了一劑后悔藥,能讓你趕緊改掉手殘寫錯(cuò)的代碼提前測試Bash腳本的行為。

這樣,便能防止Bash的危險(xiǎn)命令執(zhí)行了錯(cuò)誤的參數(shù),從而帶來的災(zāi)難性后果。

下圖是Bach框架中提供的一個(gè)名為 @do-not-panic 的 API,將它直接放進(jìn)含有危險(xiǎn)命令的測試方法后,可以避免出現(xiàn)不小心調(diào)用的情況。

防止刪庫悲劇發(fā)生,這里有個(gè)Bash腳本測試框架,危險(xiǎn)代碼一測便知

有用戶指出,這個(gè)API的名字非常友好

看起來再也不用刪庫跑路了。

使用方法也很簡單,只需要掌握幾個(gè)測試實(shí)例,就能輕松上手使用這款測試框架。(文末附框架代碼)

Bach測試方法

這款測試框架的優(yōu)勢在于,它真的非常小(50kB左右),下載后只要在編寫腳本測試前,用source命令導(dǎo)入一下Bach框架中的bach.sh,就能直接使用。

下圖是測試含rm -rf這樣的危險(xiǎn)命令的樣例。

圖中可見,我們將需要執(zhí)行的代碼部分寫在以test-開頭的方法中,Bach則會(huì)自動(dòng)尋找與這個(gè)測試方法對(duì)應(yīng)的-assert結(jié)尾的驗(yàn)證。

防止刪庫悲劇發(fā)生,這里有個(gè)Bash腳本測試框架,危險(xiǎn)代碼一測便知

圖中是手殘的范例,變量抄都抄錯(cuò)了

也就是說,Bach運(yùn)行兩個(gè)方法時(shí),會(huì)驗(yàn)證兩個(gè)方法中執(zhí)行的命令及其參數(shù)是否一致(圖中顯然不一致),如果不一致,測試結(jié)果便會(huì)失敗。

了解了測試腳本的方法,來看看怎么寫模擬命令。

用Bach模擬/直接調(diào)用命令

在Bach測試框架中,所提供的API都是以@開頭的。

其中,有一部分命令可以被模擬(Mock API),另外,如果不得不在測試時(shí)直接調(diào)用部分命令,Bach中也提供了直接執(zhí)行這些命令的API。

鑒于command和xargs命令的特殊性,Bach很特別地為這兩個(gè)命令做了模擬。

在網(wǎng)頁的測試說明中,會(huì)對(duì)這些API進(jìn)行統(tǒng)一說明。

防止刪庫悲劇發(fā)生,這里有個(gè)Bash腳本測試框架,危險(xiǎn)代碼一測便知

API調(diào)用說明范例

簡單了解后,也許有用戶會(huì)問,就Unix遺留的某些值得吐槽的設(shè)計(jì)Bash本身特性而言,已經(jīng)有不少測試的框架了,Bach到底特殊在哪里?

Bach測試原理

事實(shí)上,Bach最特別的地方,在于這是一個(gè)真正的Bash單元測試框架。

也就是說,Bach可以用于測試Bash中一些非常危險(xiǎn)的命令,且不用擔(dān)心會(huì)產(chǎn)生任何后果。

畢竟在Bach中,沒有任何在PATH中的命令會(huì)被執(zhí)行,除非明確地指定了路徑。

Bach驗(yàn)證的是命令的調(diào)用,而非命令的結(jié)果,畢竟對(duì)于Shell腳本來說,最重要的是驗(yàn)證命令的調(diào)用是否傳入了期望的參數(shù)或選項(xiàng)。

這款Bach測試框架與目前其他部分測試框架(如Bats、Shunit2等)的區(qū)別在于,后者實(shí)際上都會(huì)調(diào)用系統(tǒng)PATH中的命令,然而Bach是絕對(duì)安全的。

所以,即使是初學(xué)者,也可以安心地用Bach去練習(xí)Bash編程,且不用擔(dān)心任何誤操作。

防止刪庫悲劇發(fā)生,這里有個(gè)Bash腳本測試框架,危險(xiǎn)代碼一測便知

網(wǎng)頁內(nèi)的代碼有非常友好詳細(xì)的注釋

聽起來簡直就像是為Bash設(shè)計(jì)的完美補(bǔ)丁。

當(dāng)然,目前Bach依舊有所限制,例如它不能阻止直接使用絕對(duì)路徑的命令調(diào)用,也無法無法阻止 I/O 重定向等。

但這款測試框架依舊在不斷地更新,目前正在被寶馬集團(tuán)和華為使用。

感興趣的小伙伴,可以期待一下它的后續(xù),或是一同成為Bach框架的代碼貢獻(xiàn)者。

作者介紹

柴鋒,一位有著15年碼齡的軟件開發(fā)工程師,熟悉Unix/Linux系統(tǒng)、IT運(yùn)維、自動(dòng)化測試和持續(xù)交付。

傳送門

Bach測試框架地址https://github.com/bach-sh/bach/blob/master/README-cn.md

測試實(shí)例https://github.com/bach-sh/bach/blob/master/tests/bach-testing-framework.test.sh

 

 

責(zé)任編輯:張燕妮 來源: 量子位
相關(guān)推薦

2009-11-27 08:59:18

Windows 7系統(tǒng)升級(jí)

2013-05-14 09:22:56

Intel密碼安全

2024-01-22 07:10:00

AI視頻

2019-04-01 05:42:24

JavaScript視覺程序代碼

2025-04-27 19:37:31

MCP服務(wù)器OpenAI

2024-04-01 11:52:46

2018-03-25 09:11:31

大數(shù)據(jù)機(jī)器學(xué)習(xí)分析軟件

2018-08-02 15:40:59

2019-01-23 09:48:06

數(shù)據(jù)清洗數(shù)據(jù)分析代碼

2021-03-11 21:30:43

BATSBash軟件開發(fā)

2021-04-11 07:20:01

應(yīng)用APP濫用手機(jī)隱私風(fēng)險(xiǎn)

2020-05-22 13:32:24

可視化詞云圖數(shù)據(jù)

2018-07-30 09:33:21

2020-11-02 15:49:35

機(jī)器學(xué)習(xí)技術(shù)云計(jì)算

2016-08-23 00:39:25

2019-11-08 09:46:34

技術(shù)功能開發(fā)

2019-09-22 18:53:27

Jupyter Not代碼開發(fā)

2021-01-18 11:50:55

Python編程語言代碼

2022-03-28 13:04:10

機(jī)器學(xué)習(xí)模型計(jì)算機(jī)

2019-08-29 16:05:06

物聯(lián)網(wǎng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)