设置新机器时使用旧机器的bash历史文件?

Mic*_*ant 6 bash command-history

我喜欢我的 bash 历史。有时我发出了很长的命令,我真的依赖我的 bash 历史来快速恢复它们。我增加了我的历史记录大小:

HISTSIZE=100000
HISTFILESIZE=200000
Run Code Online (Sandbox Code Playgroud)

在我的 .bashrc 中

我也有别名:

alias h='history | tail'
alias hg='history | grep'
Run Code Online (Sandbox Code Playgroud)

这让我可以做hhg some_text真的很方便

我的问题是:我可以将此历史文件移动到新机器上吗?例如我的机器最近崩溃了,我不得不重建它。我是否会遇到任何问题,将不同的 .history 文件放入其中,可能会替换已经存在的文件。我是否需要确保替换它,或者我实际上可以将两个历史文件附加在一起而没有问题?

Run*_*ium 6

是的。您可以将旧的历史文件复制到新安装。您也可以将其与旧/新合并。

  • 如果你没有HISTTIMEFORMAT设置历史文件只保存命令。
  • 如果设置了它,则每个命令都有一个以哈希开头的时间戳:

    #1122334455
    command1
    #1122334459
    command2
    
    Run Code Online (Sandbox Code Playgroud)

但是请注意,如果您发出例如:

$ echo 'foo
> bar
> baz' >> some_file
Run Code Online (Sandbox Code Playgroud)

它将被保存为:

#1122334459
echo 'foo
bar
baz' >> some_file
Run Code Online (Sandbox Code Playgroud)

但是history要显示:

4 CMD_TIME echo 'foo
5 CUR_TIME bar
6 CUR_TIME baz' >> some_file
Run Code Online (Sandbox Code Playgroud)

命令如:

$ foo | \
bar | \
baz
Run Code Online (Sandbox Code Playgroud)

如果您设置shopt -s cmdhist.


我使用各种但经常是这样的:

HISTSIZE=500000
HISTFILESIZE=500000
# Ignore dupes and space commands
HISTCONTROL=ignoreboth
# Save and show timestamps
HISTTIMEFORMAT='%F %T '
# append to the history file, don't overwrite it
shopt -s histappend
# Save and reload the history after each command finishes
# This one I have a function to turn on/off. Effect is that commands are
# accessible in all terminals after execution.
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
Run Code Online (Sandbox Code Playgroud)

我还定期备份历史文件,并有一些脚本和别名来搜索历史——甚至可以追溯到很多年前。有时我记得我做了一些类似于我 1.5 年前现在正在做的事情,并且可以快速查找历史。

至于时间戳,我使用了两种变体。history通过临时设置HISTTIMEFORMAT为“”显示带有时间戳和另一个没有显示的节目。


如果时间戳缺少当前时间(大约),则使用。如果存在时间戳,则历史按时间排序。

因此:

.bash_history (时间戳简化)

#timestamp 000012
some command
#timestamp 000002
some other command

$ history
1 13 aug 2013 10:44 some other command
2 13 aug 2013 12:13 some command
Run Code Online (Sandbox Code Playgroud)

然而,相信排序的历史文件更有效是合理的(bash 不必进行任何改组)。


至于查找Ctrl-R通常很有用。对于其他事情,请查看例如操作历史的命令事件指示符一些杂项命令等。