我正在用python编写一个外壳包装脚本(term-cheat),可用于查找,收集和执行外壳命令。我想将执行的命令添加到Shell历史记录中。 我尝试了以下类似操作,但未成功。
subprocess.Popen('history -s "%s"'%command_string, shell=True, executable=os.environ['SHELL'])
os.system('fc -S "%s"'%command_string)
答案 0 :(得分:3)
没有跨外壳的通用移植选项:历史记录是一种交互式工具,没有关于其实现方式的严格POSIX规范。
也就是说,要使通用方法在功能和安全性之上都需要进行一些修复:
subprocess.Popen(['bash', '-ic', 'set -o history; history -s "$1"', '_', command_string])
-i
运行bash来完全设置它。set -o history
来打开历史记录 。command_string
带外传递而不是将其替换为-c
之后的参数可以避免大量的安全性错误(试图向历史记录添加一行可能会执行其中的一部分)。