我使用GNU screen 5个不同的会话,每个会话存储自己的命令历史。 但是我经常在历史中找不到一个命令,虽然我确定几个星期前我正在使用它。
历史规模似乎有一个很大的限制? 我怎样才能把它设置成无穷大?
一个相关的问题:我如何控制一个会话历史的存储位置? 通常情况下,我们的系统pipe理员重新启动计算机(S),我失去了我的所有会议,我必须做screen -wipe因为会话损坏。 那么,所有的历史都消失了。 :(我想在这种情况下find存储的历史logging,并将其绑定在新创build的会话中。
更新 :我不问如何统一会话历史。 只是,我希望每个会话都有一个无限的历史logging,而且我希望能够将历史logging“加载”到新会话中,如果旧会话被损坏或删除。
更新2 :你可能已经想通了:当我说我用5个不同的会话使用GNU screen ,我真的是指一个GNU screen会议与5个不同的窗口。 抱歉。
你最好使用Bash的历史比屏幕的。 屏幕保持一个回滚缓冲区(可能在内存中,而不是在一个文件中)。 当你回想起使用Ctrl – a {命令的时候,它实际上是通过屏幕上出现的所有东西来进行的,这些东西仍然在缓冲区中,看上去像一个提示符。 没有真正的命令历史。 顺便说一句,您可以使用screen -h num或defscrollback num或scrollback num命令来增加回滚缓冲区的大小。
你可以使用沃伦的build议,保持你的Bash历史最新。 和/或您可以使用我的日志function之一,可以保存您的IP地址或屏幕会话ID以及date,时间,当前的工作目录和实际的命令。 我自己一直都在用这个 你可能需要设置我的函数使用的variables$hcmntextra来包含$STY所以屏幕会话名也被logging下来。
我在SU上问了一个类似的问题: https : //superuser.com/questions/37576/can-history-files-be-unified-in-
引用接受的答案 :
这里有两件事你需要做的:
将命令shopt -s histappend插入到.bashrc中。 这将附加到历史文件,而不是覆盖它。
同样在你的.bashrc ,插入PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n" ,每次bash显示提示时,历史文件将被重写和重新读取。
另见history 手册页 。
我对这个问题的首选解决scheme是以前答案之一的变化。
我喜欢为每个屏幕会话/窗口组合存储单独的文件,并且每次显示相应的提示时都会附加每个文件:
if [[ "$STY" = "" ]]; then STY="none"; fi if [[ "$WINDOW" = "" ]]; then WINDOW="none"; fi export HISTFILE=~/.bash_history.$STY.$WINDOW; PROMPT_COMMAND="$PROMPT_COMMAND; history -a"
这将创build以下历史文件:
.bash_history.none.none .bash_history.2756.pts-9.linux.0 .bash_history.2756.pts-9.linux.1 .bash_history.2881.pts-9.linux.0
如果您希望窗口{x}始终使用自己的历史logging文件,而不考虑屏幕会话使用相同的文件,则可以省略STYvariables:
if [[ "$WINDOW" = "" ]]; then WINDOW="none"; fi export HISTFILE=~/.bash_history.$WINDOW; PROMPT_COMMAND="$PROMPT_COMMAND; history -a"
这将创build以下历史文件:
.bash_history.none .bash_history.0 .bash_history.1 .bash_history.2
每个窗口的命令历史logging在每个bash会话的内存中。 你必须有bash写入不同的历史文件,让他们坚持和保持独立,就像你问。
你可以通过设置每个屏幕会话HISTFILE来做到这一点。 我想在你的启动文件中这样做的方式是这样的:
if [[ "$WINDOW" != "" ]] ; then export HISTFILE=~/.bash_history.$WINDOW ; fi
请注意,这并不能解决当您的shell通过重启终止时更新历史文件的问题。