从 ~/.bash_history 中删除历史记录

IDK*_*IDK 8 gedit command-line bash bash-history

我有几个关于存储在~/.bash_history.

  1. 我可以使用history命令在终端中看到该文件,但是如果我尝试使用gedit bash_history该文件打开它,则该文件完全为空。为什么?

  2. 我已经找到了如何使用以下代码行从终端中删除文件中的特定行数:

    for i in {1..N}; do history -d N; done
    
    Run Code Online (Sandbox Code Playgroud)

    其中 N 是您要删除的行(或命令)数,但现在历史文件显示了最后一个命令,如果您想覆盖您的内容,那不是很聪明。所以问题是:我怎样才能给出最后一行代码并确保这不会被记录?

des*_*ert 18

  1. 您只是忘记了前面的点,打开(bash)终端历史文件的命令是

    gedit ~/.bash_history
    
    Run Code Online (Sandbox Code Playgroud)

    此文件仅在您关闭终端时更新。

  2. 要从此文件中删除最后10行并且不记录此命令本身,请打开一个新终端并执行以下命令链:

    sed -n -e :a -e '1,10!{P;N;D;};N;ba' ~/.bash_history && history -c && exit
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    for i in {1..10}; do sed -i '$d' ~/.bash_history; done && history -c && exit
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    head -n -10 ~/.bash_history > ~/.b_h_2 && mv ~/.b_h_2 ~/.bash_history && history -c && exit
    
    Run Code Online (Sandbox Code Playgroud)

    sedhead分别从 中删除所选行~/.bash_historyhistory -c清除终端的历史记录并exit关闭它。

  • @Melebius 看起来很有希望,但是如何将输出重定向到覆盖它的输入文件?`head -n -N testfile > testfile` 只是清除文件!我添加了一个解决方法,但它肯定不会更短。 (2认同)