防止删库悲剧发生,这里有个Bash脚本测试框架,危险代码一测便知

应用开发2025-11-05 09:34:5944364

 本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,防止发生转载请联系出处。删库试框

想要清理文件夹内部分冗余文件,悲剧本测便知结果误删了同事刚合的脚架危代码?

(例如,在rm -rf /usr/bin/test的险代/usr后面加了个空格,结果删掉了整个/usr文件)

相比于其他语言,码测Bash自带许多令人摸不着头脑的防止发生设计,其中之一就是删库试框变量中间不能加空格。这就导致Bash在调试时,悲剧本测便知某些命令具有危险性,脚架危例如rm -rf是险代删除文件夹下所有文件,一旦执行错误,码测可能会产生爆炸的防止发生效果。

现在,删库试框手残党的悲剧本测便知福音来了:GitHub上有一位朋友推出了一款Bash命令的测试框架Bach,助你检测脚本里有没有危险的成分。

据开发者介绍,这款框架能让你心情平静

只要在测试脚本中导入这款Bach框架,就相当于服下了一剂后悔药,能让你赶紧改掉手残写错的代码提前测试Bash脚本的行为。

这样,便能防止Bash的危险命令执行了错误的服务器托管参数,从而带来的灾难性后果。

下图是Bach框架中提供的一个名为 @do-not-panic 的 API,将它直接放进含有危险命令的测试方法后,可以避免出现不小心调用的情况。

有用户指出,这个API的名字非常友好

看起来再也不用删库跑路了。

使用方法也很简单,只需要掌握几个测试实例,就能轻松上手使用这款测试框架。(文末附框架代码)

Bach测试方法

这款测试框架的优势在于,它真的非常小(50kB左右),下载后只要在编写脚本测试前,用source命令导入一下Bach框架中的bach.sh,就能直接使用。

下图是测试含rm -rf这样的危险命令的样例。

图中可见,我们将需要执行的代码部分写在以test-开头的方法中,亿华云计算Bach则会自动寻找与这个测试方法对应的-assert结尾的验证。

图中是手残的范例,变量抄都抄错了

也就是说,Bach运行两个方法时,会验证两个方法中执行的命令及其参数是否一致(图中显然不一致),如果不一致,测试结果便会失败。

了解了测试脚本的方法,来看看怎么写模拟命令。

用Bach模拟/直接调用命令

在Bach测试框架中,所提供的API都是以@开头的。

其中,有一部分命令可以被模拟(Mock API),另外,如果不得不在测试时直接调用部分命令,Bach中也提供了直接执行这些命令的API。

鉴于command和xargs命令的特殊性,Bach很特别地为这两个命令做了模拟。

在网页的测试说明中,免费源码下载会对这些API进行统一说明。

API调用说明范例

简单了解后,也许有用户会问,就Unix遗留的某些值得吐槽的设计Bash本身特性而言,已经有不少测试的框架了,Bach到底特殊在哪里?

Bach测试原理

事实上,Bach最特别的地方,在于这是一个真正的Bash单元测试框架

也就是说,Bach可以用于测试Bash中一些非常危险的命令,且不用担心会产生任何后果。

毕竟在Bach中,没有任何在PATH中的命令会被执行,除非明确地指定了路径。

Bach验证的是命令的调用,而非命令的结果,毕竟对于Shell脚本来说,最重要的是验证命令的调用是否传入了期望的参数或选项。

这款Bach测试框架与目前其他部分测试框架(如Bats、Shunit2等)的区别在于,后者实际上都会调用系统PATH中的命令,然而Bach是绝对安全的。

所以,即使是初学者,也可以安心地用Bach去练习Bash编程,且不用担心任何误操作。

网页内的代码有非常友好详细的注释

听起来简直就像是为Bash设计的完美补丁。

当然,目前Bach依旧有所限制,例如它不能阻止直接使用绝对路径的命令调用,也无法无法阻止 I/O 重定向等。

但这款测试框架依旧在不断地更新,目前正在被宝马集团和华为使用。

感兴趣的小伙伴,可以期待一下它的后续,或是一同成为Bach框架的代码贡献者。

作者介绍

柴锋,一位有着15年码龄的软件开发工程师,熟悉Unix/Linux系统、IT运维、自动化测试和持续交付。

传送门

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

测试实例https://github.com/bach-sh/bach/blob/master/tests/bach-testing-framework.test.sh

本文地址:http://www.bzve.cn/html/02a65699341.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

我想很多人都试过装双系统,windows系统在重装的时候总是把MBR重写了,重装windows后无法找到ubuntu的引导。恢复引导其实也很简单,找个ubuntu的安装盘,从安装盘启动,试用ubuntu,打开终端。 1、运行命令:sudo fdisk -l (这里不是数字1,是字母l),找到ubuntu所在根目录。2、运行命令:sudo mkdir /media/tmpdir 建立临时文件夹,然后输入命令:sudo mount /dev/sda11 /media/tmpdir挂载系统。3、接下来是最重要的一步,输入命令: sudo grub-install --root-directory=/media/tmpdir /dev/sda (注意,这里就是sda,后面不要写成sda11),假如显示no error report,则表示基本成功了。 4、接下来,重启系统.这时引导已经像往常一样了。但先不要进入windows,先进入ubuntu,在终端中输入命令:sudo update-grub2 更新grub后方成功完成,这时候就可以重启进入任意一个系统了注意事项:可能你显示的跟我不一样,因为我这是在真正的ubuntu系统下截的图,我这里的挂载情况是这样的。

电脑IO错误导致开机多次的故障及解决方法(解析电脑IO错误引起的开机问题及如何修复)

505使用教程(505使用教程,让您的创作更出色)

电脑绣花制版入门自学教程(轻松掌握电脑绣花制版技巧,开启创作之旅)

全网通苹果7手机的性能和使用体验(探索全网通苹果7手机的优势和功能特点)

海尔平板电脑华为鸿蒙教程(掌握华为鸿蒙系统,轻松玩转海尔平板电脑)

VivoX6sPlus(探索VivoX6sPlus拍照功能的无限可能性)

电脑连接宽错误633的解决方法(解决Windows电脑连接宽带时出现的错误633问题)

友情链接

滇ICP备2023006006号-39