【问题标题】:Protecting scripts from errant clobbering保护脚本免受错误破坏
【发布时间】:2018-12-26 18:26:43
【问题描述】:

我花了一些时间来构建这个方便的 bash 脚本,它通过stdin 接受输入。我从这个问题的最佳答案中得到了这个想法:Pipe input into a script

但是,我做了一些非常愚蠢的事情。我在终端中输入了以下内容:

echo '{"test": 1}' > ./myscript.sh

我的意思是将 | 通过管道传输到我的脚本,而不是将 > 重定向到 echo 的输出。

直到我生命中的这一刻,我从未以这种方式意外破坏任何文件。直到今天我才犯了这个错误,我真的很惊讶。 :D

无论如何,现在我已经让自己变得偏执,我会再次这样做。除了将脚本标记为只读或对其进行备份之外,我还能做些什么来保护自己?首先编写一个接受来自stdin 的输入的脚本是一种不好的做法吗?

【问题讨论】:

  • set -o noclobber怎么样?
  • 我认为正确的答案是拥有一个良好的备份系统——不仅仅是脚本,而是你不想随机丢失的一切 .您当然可以防止个别类型的数据丢失错误,但不能防止所有错误。
  • 鉴于答案的多样性,我的问题可能过于广泛。我选择了我实施的答案,因为我确实有版本控制和备份计划,但我从没想过将脚本扔到路径上的目录中。

标签: bash


【解决方案1】:

是的,您可以做一件事——将您的脚本检入源代码控制存储库(git、svn 等)。

bash 脚本是代码,您编写的任何重要代码都应检入源代码控制(并定期提交更改),以便在发生此类情况时,您可以恢复最近提交的文件的版本并继续。

【讨论】:

    【解决方案2】:

    这是一个非常开放的问题,但我通常将脚本放在全局 bin 文件夹中(~/.bin 左右)。这让我可以将它们调用为myscript 而不是path/to/myscript.sh,所以如果我不小心使用了> 而不是|,它只会在当前目录中创建一个具有该名称的文件——实际上永远不会是@987654326 @。

    【讨论】:

    • 是的,除了>,我的问题的根源是我在当前目录中运行了脚本。你的技术肯定会有所帮助。在这种情况下,执行没有扩展名的 bash 脚本是一个好处!
    猜你喜欢
    • 2012-12-20
    • 2018-11-18
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 2015-12-20
    • 1970-01-01
    • 2015-12-16
    相关资源
    最近更新 更多