为什么对bash脚本默认禁用history命令

时间:2017-08-21 15:00:26

标签: bash

我做了一个小的bash脚本来清理一些文件(*〜,*#等)和终端,但是我已经看到默认情况下在非交互式shell中禁用了history命令通过bash(我想添加"历史-c")。

我只是好奇为什么?

1 个答案:

答案 0 :(得分:2)

一般

  • 对于绝大多数脚本,读取历史记录的dotfiles将是纯粹的启动时间开销,并且该内容从未在运行时使用。这会使所有 shell脚本启动时间更长,没有任何补偿效益。
  • 如果非交互式脚本支持支持历史记录扩展,这将使其行为依赖于先前的交互式操作,因此更难以预测并且在调用之间存在差异。特别是,这是一个令人信服的理由,即在非交互式脚本调用中默认不启用set -H
  • 历史记录在POSIX sh标准的User Portability Utilities部分中指定,该部分侧重于支持交互式脚本。引用标准,重点补充:

      

    以交互方式使用sh实用程序时,它应保留先前从HISTFILE环境变量命名的文件中的终端输入的命令列表。未指定此文件的类型,大小和内部格式。如果文件访问权限允许,多个sh进程可以共享对用户的文件访问权限;请参阅HISTFILE环境变量的说明。

最后,一些背景:

交互式脚本中需要

history -c,因为该交互式shell将在退出时写入HISTFILE的新副本;如果您没有使用特殊命令,它可能会写回您想要清除的内容。在非交互式shell中,它无论如何都不会写任何历史记录,所以你不妨简单地删除或截断历史文件。