可能重复:
bash 中历史文件可以统一吗?
我使用 Ubuntu Server 9.10,我希望能够查看多个终端会话的 bash 历史记录。例如,我的最后 200 条命令左右,即使我在此期间已经注销。
当我使用时,history
我只能看到来自实际终端会话的所有命令。如何查看来自 Bash 的更多命令历史记录?在 Ubuntu 中,是否有任何 bash 的特定设置需要我更改其默认值?
我没有~/.bash_history
文件。但我有~/.bashrc
一个HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredups
HISTCONTROL=ignoreboth
echo $HISTFILE
/home/sanoj/.bash_history
echo $HISTSIZE
500
echo $HISTFILESIZE
500
echo $HISTCONTROL
ignoreboth
更新:我现在正在 VirtualBox 中尝试 Ubuntu Server 10.10。如果我没有使用关机命令就直接关闭 VirtualBox,那么下次启动时,上一个会话中的命令不会保存在历史文件中。
仅当我使用关机命令关闭机器时,命令才会保存。例如,shutdown -P 0。
这肯定就是我的问题的原因。所以我必须弄清楚如何更频繁地保存命令历史记录。例如,在每个命令之后。
答案1
您可以使用
history -a
立即将内存中的历史记录附加到历史记录文件中。除非执行此操作或退出另一个终端会话,否则一个终端会话无法查看另一个终端会话。
您可以使用
history 200 | less
查看该数量的条目。
此外,还可以HISTSIZE
参阅 Bash 手册页中有关 的条目HISTFILESIZE
。
答案2
注销后,历史记录将附加到文件中~/.bash_history
。请查看那里。
默认情况下,它会记住您的最后 500 条命令。如果您想保存更多命令,请HISTSIZE
在 中设置变量~/.bashrc
。
我也确实添加ignoredups
了HISTCONTROL
(使用HISTCONTROL=$HISTCONTROL:ignoredup
)。这使得重复的连续命令仅保存一次。
看看man 1 bash
您还可以调整哪些历史记录。
答案3
bash 历史记录通常在 shell 开始运行时加载,并在正常退出时保存。您可以使用history -a
和来覆盖此设置,但除非您滥用或类似情况,history -n
否则不会自动覆盖。$PROMPT_COMMAND
答案4
Sanoj,这真的应该“正常工作”;我认为您不需要做任何特别的事情来实现这一点。听起来好像有什么东西干扰了事件的正常进程。
我会查看 /etc/profile、/etc/bashrc(或者根据某些来源可能是 /etc/bash.bashrc)、~/.bash_profile、~/.bashrc、~/.bash_login、~/.bash_logout,看看是否有任何内容可能会影响历史记录(可能grep -i hist
在上述每个文件中)。
... 我特别想知道您是否在 ~/.bash_logout 中有一些可以删除该文件的东西。
或者,是否有可能某些东西覆盖了该$HOME
变量?