6

在任何给定时间,我都有 3 次登录到同一台服务器。当然,我经常使用屏幕,但假设这个目的允许我:

 1 session running something
 1 session looking at output
 1 session shuffling files to/from various places

如果在任何时候我失去了所有三个连接,我会失去 2/3 的历史记录,因为当我重新登录时,我会从三个连接中的随机 1 个中获取历史记录。

有没有办法阻止这种情况并将所有三个历史文件合并为 1?

或者,有没有办法将每个登录声明为“ttyN”,从而将每个登录与其单独的历史分开,但可检索/可重新连接?

谢谢!

4

5 回答 5

1

可能的解决方案?

打开终端/屏幕后

使用 History-File 设置启动你的 shell:

HISTFILE=$HOME/session1-history  bash

并继续使用这个 bash。运行不同的会话历史记录

HISTFILE=$HOME/session2-history  bash

等等

于 2013-08-16T07:35:47.973 回答
1

有一个用于 bash 和 zsh 的开源 shell 历史记录器可以解决您的问题(免责声明:我编写并维护了它)。

https://github.com/barabo/advanced-shell-history

这个想法是使用内置的 bash 挂钩将您的命令写入 sqlite3 数据库。如果您真的需要返回并弄清楚您输入了哪些命令/它们运行了多长时间/它们的退出代码是什么 - 您应该尝试一下。

它救了我很多次。

于 2014-08-01T17:30:08.097 回答
1

只需将其添加到您的.bashrc文件中即可。

# Avoid duplicates..
export HISTCONTROL=ignoredups:erasedups  

# Append history entries..
shopt -s histappend    

# After each command, save and reload history
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"

在这个Unix Stackexchange 帖子中找到了这个答案。

我试过这个,它似乎可以同时在多个终端上工作,唯一的问题是你必须为终端执行一个命令来从 .bash_history 获取最新的历史记录。

例如,如果我打开第一个终端并键入echo check 1,然后打开第二个终端并键入echo check 2. 现在如果我回到第一个终端并按向上键,我不会得到echo check 2,因为最后一次从历史文件中获取历史是在我执行上一个命令时。所以我可以在Enter不指定命令的情况下按下它,它将获取最后的历史记录条目。现在,如果我按向上键,它将显示echo check 2,这是预期的行为。

于 2014-06-08T17:03:05.343 回答
0

如果我正确理解了您的要求,您将打开多个终端会话,并希望在一个会话中输入的命令可以通过其他会话中的历史记录使用。

您需要将这些行放在您的顶部~/.bashrc

export HISTFILESIZE=100000
export HISTSIZE=100000
# avoid & erase dups
export HISTCONTROL=ignoredups:erasedups
shopt -s histappend
# save & reload history after each command enter in shell
export PROMPT_COMMAND="\history -a; \history -c; \history -r; $PROMPT_COMMAND"

最重要的是histappend确保每次都将新的历史行附加到历史文件中。

PS:您需要按 Enter 键才能查看每个会话中最近添加的历史记录。

有关更强大的解决方案,请参阅: http: //ptspts.blogspot.in/2011/03/how-to-automatically-synchronize-shell.html

于 2013-08-16T21:58:12.463 回答
-1

您可以设置许多选项来防止 Bash 实例覆盖彼此的历史记录。有关完整说明,请参阅此常见问题解答

在你的.bashrc,添加

HISTFILESIZE=400000000
HISTSIZE=10000
PROMPT_COMMAND="history -a"
export HISTSIZE PROMPT_COMMAND
shopt -s histappend
于 2013-08-15T17:50:42.850 回答