77百科网
当前位置: 首页 生活百科

bash脚本关闭进程(防止删库悲剧发生)

时间:2023-06-28 作者: 小编 阅读量: 1 栏目名: 生活百科

也就是说,Bach可以用于测试Bash中一些非常危险的命令,且不用担心会产生任何后果。毕竟在Bach中,没有任何在PATH中的命令会被执行,除非明确地指定了路径。所以,即使是初学者,也可以安心地用Bach去练习Bash编程,且不用担心任何误操作。感兴趣的小伙伴,可以期待一下它的后续,或是一同成为Bach框架的代码贡献者。

萧箫 发自 凹非寺 量子位 报道 | 公众号 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

— 完 —

量子位 QbitAI · 头条号签约

关注我们,第一时间获知前沿科技动态

,
    推荐阅读
  • 社保养老金计算方法是什么(社保养老金如何计算)

    以下内容大家不妨参考一二希望能帮到您!社保养老金计算方法是什么统筹养老金:基础养老金月标准以参保人员退休时上一年度当地职工月平均工资和本人指数化月平均缴费工资的平均值为基数,缴费每满1年发给l%。个人账号养老金:个人账号养老金月标准为本人个人账号储存额除以计发月数。

  • 狗狗不吃东西怎么办(狗狗不吃狗粮怎么办)

    遇到狗狗不吃东西的情况,一般是下面五种原因导致的:狗狗生病、狗狗发情期到了、近期没有运动、对吃的挑食、肠胃消化不良。

  • 巧克力马芬蛋糕的家常做法(巧克力马芬蛋糕的家常做法介绍)

    下面内容希望能帮助到你,我们来一起看看吧!巧克力马芬蛋糕的家常做法材料:低粉110克,黄油55克,糖60克,鸡蛋1个,牛奶90毫升,奶粉20克,盐少许,泡打粉1.5克,巧克力豆适量。然后打至蓬松颜色变浅。分3次加入鸡蛋。继续打发.每一次都需要搅拌鸡蛋和黄油完全融合。把拌好的面糊倒入纸杯里,把巧克力豆撒在表面。预热好的烤箱跳到185度设定25-30分钟,然后烤至充分膨胀到表面金黄即可。

  • 三国无双8怎么mod(三国无双8怎么退出游戏)

    4、然后我们进入游戏,找到该人物,然后查看该人物的游戏服装,你会发现和之前大不一样。

  • 2020款路虎卫士是非承载式车身吗(2020款路虎卫士车身尺寸)

    2020款路虎卫士不采用非承载式车身设计。这款车采用了承载式车身设计,但路虎加强了车身的刚性。2020款路虎卫士是一款中大型suv。这款发动机搭载48v轻混动系统和缸内直喷技术,采用铝合金缸盖和缸体。与这台发动机匹配的是8at变速箱。使用8at变速箱可以提高汽车的换挡平顺性和燃油经济性。而且8at变速箱的可靠性和耐用性更好。2020款路虎卫士配备全时四驱系统和多片离合器中央差速器。

  • 鲜香菇冷库储存方法(新鲜香菇怎么保存)

    鲜香菇冷库储存方法新鲜的香菇不要沾水,以免腐烂,伞朝下柄朝上放在保鲜袋里,扎几个透气孔,放在冰箱里冷藏,可保鲜一星期左右。新鲜香菇在5℃左右可以保存15天左右,但是由于在运输途中已经受到损伤,这个保鲜期会缩短,所以在冰箱中最好储藏不要超过一周,最佳食用期应该在3天以内。

  • 我的世界好用的功能与玩法(无聊时候做什么)

    并且大量的MOD都包括了死亡不掉落等等变态的作弊系统。所以作为一名原版生存党的一员,对MOD的要求也是极为苛刻的。六、更加艰难的生存有些人认为极限模式就是《我的世界》最难的生存模式了。

  • 天地劫前期太难攻略(三途川60级副本打法攻略)

    大家好,我是正在整理本周60级三途川的打法的何二维一。在看和赞不要忘了点哦!

  • 东阿阿胶的正确吃法(东阿阿胶怎么吃最好)

    需要先把东阿阿胶糕砸碎,然后取出六克到十克左右放入到碗里面,加入开水冲成大半碗左右的量,因为阿胶是很难融化的,所以说,在加入开水以后一定要用筷子来对其进行反复搅拌,一直到全部融化开来,接着可以加入一些糖在里面调味。

  • 故里有长安是什么含义(怎么理解故里有长安的意思)

    以下内容大家不妨参考一二希望能帮到您!故里有长安是什么含义长安归故里,故里有长安,可以说是一个表白的梗,在这里长安故里是两个名字,这句话的完整版是:以后我叫长安,你叫故里,因为长安归故里,故里有长安。这句话看起来很有意境,情侣间喜欢用这样的词来做情侣名。长安属于故里,而故里之中有长安,也就是说你中有我,我中有你。