bash 杯具2个

过去几个月使用 bash 进行一些自动化处理的时候,出现了2次悲剧,辛辛苦苦跑的数据被 rm -rf 掉了。

第一个悲剧:

 

简化之后的代码如下,少了注释中的那行代码,结果十几个数据文件就只剩下来了一个。

 

第二个悲剧:

这个更悲剧,丢失的是跑了1个月的所有数据。之后重新运行了一个月才彻底恢复过来。涉及的问题有2个脚本:

脚本1:

 

脚本2:

 

两个脚本同时运行。脚本2作为监控脚本来防止 $somedir 太大(因为测试的程序有时候会死循环的往文件里面写东西)。当检测到过大时就直接删除掉。当脚本1在$somedir上进行操作的时候,脚本2没打招呼的把$somedir删除了。导致了脚本1的pushd失败。于是,删除了错误目录下的所有文件(因为没有加 -r 选项所以目录没有被删除)。

悲剧还没有结束。当 pushd 失败,当前目录下也没有文件了之后,$i 的值就是 ‘*’。而原来的脚本1中还有一行类似这样的语句:

    out_put_something > backups/$i

eval 之后得到的语句是

    out_put_something > backups/*

结果,backups/目录下所有的文件内容都被覆盖了。

 

教训:

1.脚本之间进行目录操作的时候一定要小心。rm -rf 命令也要小心。

2.脚本中的每一条语句都要考虑失败的情况。

3.使用变量作为文件名的时候需要加双引号(”)。

4.在工作脚本中直接进行备份不靠谱。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值