我可以在多个屏幕窗口中轻松搜索我的历史记录吗?

我可以在多个屏幕窗口中轻松搜索我的历史记录吗?

我当前的screen会话有 12 个打开的窗口。它已经运行了几周......我知道我执行了 ImageMagickconvert命令上周某个时候这 12 个屏幕窗口中的一个...有什么方法可以轻松搜索所有 12 个实例的 Bash 历史记录,而无需关闭它们或history | grep convert在所有 12 个屏幕中运行?

答案1

您可以history -a; history -c在所有窗口中运行以保存历史记录。然后history -r刷新一下就可以了。

要更永久地解决此问题,请将其添加到您的.bashrc

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

答案2

tcsh 允许您通过使用定期别名在会话之间共享历史记录。

在您的 .cshrc(或 .tcshrc)文件中:

set tperiod = 60 #(or any other number.  Time in minutes between refreshing)
alias periodic 'history -S; echo "Syncing history"'

这将每 60 分钟自动执行一次历史命令。这会将历史记录保存到主目录中的公共历史记录文件中。要更频繁地更新历史记录,可以降低 tperiod 数字,或者只需执行“periodic”命令来手动刷新

答案3

听起来很难。这里有一些可能适合您的方法。

如果您安装了进程统计工具(在 Linux 上,查找名为 的软件包acct)并拥有使用它们的权限,您可以找出您何时以及可能在哪个终端上运行convert

lastcomm convert

如果这不可用或不确定,您可以history在每个 bash 实例中执行命令来查找convert命令。这也会找到 bash 启动时历史文件中的命令。

: >/tmp/convert.history
for w in $(seq 0 11); do
  screen -p $w -X stuff \
    'history | sed 's/^.*convert/'$w'&/" >>/tmp/convert.history
'; done
  • $(seq 0 11)迭代屏幕窗口的数量。确保跳过当前未运行 bash 的窗口,但跳过其他一些会以不同方式解释输入的进程。
  • screen -p $w stuff …将以下字符串作为输入发送到指定窗口。您需要在字符串末尾添加换行符。
  • 如果您在窗口 3 中运行,该文件/tmp/convert.history将包含类似 的行列表。3 convert foo.jpgconvert foo.jpg

答案4

Bash 仅在退出时写入历史记录,这充其量只是造成了问题。我听说 zsh 可以在活动会话之间共享历史记录。

相关内容