如何从python向bash历史记录添加命令

时间:2019-02-08 12:47:55

标签: python linux bash shell zsh

我正在用python编写一个外壳包装脚本(term-cheat),可用于查找,收集和执行外壳命令。我想将执行的命令添加到Shell历史记录中。 我尝试了以下类似操作,但未成功。

subprocess.Popen('history -s "%s"'%command_string, shell=True, executable=os.environ['SHELL'])
os.system('fc -S "%s"'%command_string)

1 个答案:

答案 0 :(得分:3)

没有跨外壳的通用移植选项:历史记录是一种交互式工具,没有关于其实现方式的严格POSIX规范。

也就是说,要使通用方法在功能和安全性之上都需要进行一些修复:

subprocess.Popen(['bash', '-ic', 'set -o history; history -s "$1"', '_', command_string])
  • 仅在 interactive 外壳程序中设置HISTFILE变量。因此,您需要使用-i运行bash来完全设置它。
  • 类似地需要
  • set -o history来打开历史记录
  • command_string带外传递而不是将其替换为-c之后的参数可以避免大量的安全性错误(试图向历史记录添加一行可能会执行其中的一部分)。
  • li>