是否可以获取在父终端中运行的最后一个命令?

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 中使用它。

以上是关于是否可以获取在父终端中运行的最后一个命令?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取在 BigQuery 命令行工具中运行的最后一个作业的作业 ID?

是否可以从动作脚本运行终端命令?

VScode:编辑时执行最后一个终端命令的热键?

Kafka 运行命令

Liunx 设置后台执行python程序

在父窗口的上下文中运行脚本