首页 > 解决方案 > 如何从python将命令添加到bash历史记录

问题描述

我正在用 python 编写一个 shell 包装脚本(term-cheat),可用于查找、收集和执行 shell 命令。我很想将执行的命令添加到 shell 历史记录中。我尝试了以下几件事,但没有成功。

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

标签: pythonlinuxbashshellzsh

解决方案


没有跨外壳、普遍可移植的选项:History 是一个交互式工具,没有关于它如何实现的紧密 POSIX 规范。

也就是说,需要进行一些修复才能使尝试的通用方法在功能性和安全性方面都发挥作用:

subprocess.Popen(['bash', '-ic', 'set -o history; history -s "$1"', '_', command_string])
  • HISTFILE 变量仅在交互式shell 中设置。因此,您需要运行 bash-i来设置它。
  • set -o history同样需要打开历史记录
  • 带外传递command_string而不是将其替换到后面的参数中-c可以避免大量的安全错误(尝试将一行附加到历史记录可能会执行其中的一部分)。

推荐阅读