【发布时间】:2013-09-25 11:11:08
【问题描述】:
如果我在 bash shell 中运行此命令:
script1 -i foo | script2 -i bar | script3 -i foobar
是否有一种可靠的方法来获取该命令,因为它会出现在 script1-3 中的 bash_history 中?
据我所知,从 .bash_history 文件中获取信息是行不通的,因为写入该文件是缓冲的,因此可能不同步。
【问题讨论】:
-
从技术上讲,那里有三个命令,放在一起形成一个管道。每个脚本都可以从 argv 中恢复自己的命令,虽然只能以最终处理的形式(即扩展变量、拆分单词、删除引号等),但无法获取整个管道。正如您所说,历史记录文件是无用的(不是因为写入缓冲如此之多,而是写入只是偶尔进行,尽管您可以使历史写入更具侵略性。)
-
也许有办法挂钩到 bash 历史缓冲区?显然,脚本需要与 shell 交互才能获取信息。
-
嗯,可以设置一个环境变量来确保历史缓冲区的刷新:
export PROMPT_COMMAND='history -a'。那么是否可以从 .bash_history 获取信息? -
你当然可以试试。 (但一次只能在一个 shell 中,除非您为每个会话创建单独的历史文件。)
-
嗯,我真的需要这个来处理多个会话。也可以在会话之间同步历史记录:
export PROMPT_COMMAND='history -a; history -r'- 但我担心竞争条件。