是否可以获取在父终端中运行的最后一个命令?
Posted
技术标签:
【中文标题】是否可以获取在父终端中运行的最后一个命令?【英文标题】:Is it possible to fetch the last command ran in a parent terminal? 【发布时间】:2017-06-28 04:50:09 【问题描述】:我正在尝试以编程方式从子进程中的 bash 终端获取历史记录(执行可执行文件)。我实际上是在寻找终端运行的最后 N 个命令。
流程:
-
打开 bash 终端 PID=5
运行一些命令(sed、rpm、gpg)
运行 go executable PID=32 PPID=5
从父进程(bash 终端)获取命令和参数(sed、rpm、gpg)并打印出来
bash 内置 history
在 go/shell out 下运行时不会产生正确的结果。
读取 ~/.bash_history
不准确,因为 bash 终端的历史记录是在提示关闭时写入的。
想知道这是否可能?
【问题讨论】:
这个链接可能对unix.stackexchange.com/questions/147563/…有帮助 设置PROMPT_COMMAND='export last_command="!!"'
然后使用last_command
环境变量。注意:我不知道这是否是一种安全机制,w.r.t.外壳注入...
【参考方案1】:
按照here 的建议,您可以使用history -a <file_path>
将新命令保存到文件中,然后在子进程中您可以从文件中读取最后N 行(使用tail -n <N>
)。
【讨论】:
最终使用了这个答案并在 bashrc 中使用它。以上是关于是否可以获取在父终端中运行的最后一个命令?的主要内容,如果未能解决你的问题,请参考以下文章