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

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

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

也就是说,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 · 头条号签约

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

,
    推荐阅读
  • (我花了3天时间整理了15个网赚项目)

    既没有一个好的项目,又没人教。这也是个不错的网赚项目,操作得当,自然会有很多人为此买单。这个项目已经让很多人都成为百万富翁、千万富翁。第十三个网赚项目:学历证书办理这个项目比较冷门,但也是能赚钱的。

  • 红旗车发动机是国产的还是进口的(为什么不建议买红旗车)

    红旗汽车近几年开始发力了,红旗近几年推出的产品都是瞄准了年轻消费者的。红旗在2019年推出了两款suv车型,一款是hs5,另一款是hs7。这两款车在上市之前就受到了不少消费者的关注,特别是红旗hs7。这款发动机搭载了缸内直喷技术,并且使用了铝合金缸盖缸体。红旗hs5是一款中型suv,这款车全系搭载了2.0升涡轮增压发动机。红旗hs5和hs7的外观和内饰设计都是很符合年轻消费者的审美的,有很多消费者都会购买红旗的suv车型。

  • 一个人看懂你就是营销高手(为什么重要的事情要说三遍)

    根据统计,全世界每发生500万起交通意外的同时,只会发生20起航空意外。这种错觉,来自大脑中的“可得性捷径”。回到前面搭飞机的问题,也是我们被“可得性捷径”误导的结果。所以往往这些户外广告主要呈现的就是大大的品牌名。另外,节目冠名之所以受到青睐,也是相同的道理。

  • 怪物猎人后期可以捏脸么(怪物猎人心得女角捏脸位置的选择)

    我从1/26开始捏脸,就被游戏中的女角给雷到了,经过这几天的捏脸测试,捏脸会崩坏的原因,大多是眼睛间距、鼻子距离跟嘴的距离影响1.预设组合:选择第一页左边第一个2.脸型,依个人喜好3.肌肤,依个人喜好4.眉毛、眉间,依个人喜好5.眼睛,选择依个人喜好;抬高拉低的位置不变动,调整缩小扩大的距离,首先将距离条分成十等份,由缩小往扩大的方向(由眼睛向内往眼睛向外的方向)约2/10~4/10,我选择在2.

  • 怎么弄手机小程序(手机使用小程序步骤)

    下面更多详细答案一起来看看吧!怎么弄手机小程序打开手机,在主界面,打开微信,进入微信主界面。在进入微信主界面后,点击,进入个人中心主界面。在进入通用设置主界面后,点击,进入发现页管理设置主界面。返回微信发现页面,就可以看到小程序入口了,此时点击,进去点击搜索按钮就可以搜索你所需要的小程序了。

  • 首都高校掀起学习二十大精神热潮(首都高校掀起学习二十大精神热潮)

    师生们纷纷表示,要把党的二十大决策部署贯彻落实到推动新时代首都教育发展各方面全过程,持续推进新时代首都教育高质量发展,以奋发有为的精神,奋力书写人民满意的教育答卷。青年学者们在学习后表示,党的二十大报告擘画了全面建成社会主义现代化强国的宏伟蓝图,目标清晰、任务明确,吹响了奋进号角,让广大青年教师深受鼓舞,倍感振奋。

  • 进口hpv九价疫苗适合人群(九价HPV疫苗适用人群扩大)

    目前已被人类发现的HPV病毒家族成员大约有100多种,根据不同型别HPV诱发肿瘤的危险性高低,可分为低危型和高危型HPV。低危型HPV可导致皮肤乃至外生殖器疣。但值得庆幸的是,宫颈癌是目前为止唯一能够通过接种疫苗预防的癌症。目前国内已上市的HPV疫苗有三种,根据其可预防的HPV病毒亚型数量,可以分为二价、四价与九价HPV疫苗。

  • dnf元素师最佳加点(dnf元素师85刷图加点)

    DNF元素师85刷图加点:DNF元素师怎么加点?虽然是个站桩技能,但是大范围高伤害、减速、硬直和冰冻效果都弥补了站桩的不足。Ex极冰使得极冰输出更加高。Ex天雷将5下天雷变为3下天雷。减少了站桩时间。现在版本冰墙配合冰墙tp可以抵御许多攻击。冰墙1可以抵御一次任意大小远程伤害。缺点为释放后僵直略大。满ex攻击频率更高。

  • 雨天淋湿的鞋子会坏嘛(雨天淋湿的鞋子是否会坏)

    下面希望有你要的答案,我们一起来看看吧!雨天淋湿的鞋子会坏嘛会被泡坏,用水浸泡后,运动鞋表面皮革会氧化缩水,最后开裂,大底和中底之间的胶会脱落造成开胶,所以运动鞋不要在下雨天穿。可以再吹得时候用纸巾将鞋子包裹好在进行热风吹,可防止变形、开胶,记得要冷热风交替使用。

  • 鱼刺怎么去除 鳗鱼里的很细的鱼刺怎么去除

    虽然有时这样作可以把鱼刺除掉,但有时这样不恰当的处理,不仅没把鱼刺除掉,反而使其刺得更深,更不宜取出,严重时感染发炎就更麻烦了。有时鱼刺已掉,但还遗留有刺的感觉。所以要等待观察一下,如果仍感到不适时,一定要到医院请医生诊治。这也是鱼刺刺伤时最恰当的处理方法。