作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在用 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)
最佳答案
没有跨 shell、普遍可移植的选项:History 是一种交互式工具,没有关于其实现方式的严格 POSIX 规范。
也就是说,需要进行一些修复才能使上述尝试的通用方法既实用又安全:
subprocess.Popen(['bash', '-ic', 'set -o history; history -s "$1"', '_', command_string])
-i
运行 bash 以完全设置它。set -o history
同样需要打开历史记录。command_string
而不是将其代入 -c
之后的参数可避免大量安全漏洞(在其中尝试将一行附加到历史记录可能会执行部分而不是它)。关于python - 如何从 python 向 bash 历史记录添加命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54592827/
我是一名优秀的程序员,十分优秀!