删除 OS X 上的特定历史命令

问题描述 投票:0回答:2

我正在尝试为 mac os 创建一个别名以删除一些以前的敏感历史命令

我试过了

for h in $(history | grep "msql" | awk '{print $1-N}') ;做 echo $h ;完成;

作品

for h in $(history | grep "msql" | awk '{print $1-N}') ;做历史 -d $h ;完成;

-bash:历史:468:历史位置超出范围

编辑

此命令在 Ubuntu 上 100% 有效

for h in $(history | grep "msql" | awk '{print $1-N}' | tac) ; do history -d $h ; done; history

我只是好奇为什么它不能在 OS X 上运行

bash shell history
2个回答
1
投票

我不会自动化一次性问题。据推测,手动删除敏感的历史条目需要不到 5 分钟的时间。下面我将展示如何防止它们在未来发生。

  1. 使用 grep 查找历史记录中的特定行并使用

    history -d
    删除历史记录中的特定行:

    $ history | grep password
      121  Sun 28 Aug 2016 03:33:11 AM PDT mysql -u root -p oops_this_is_my_password
      122  Sun 28 Aug 2016 03:33:19 AM PDT history | grep password
    $ history -d 121
    $ history | grep password
      121  Sun 28 Aug 2016 03:33:19 AM PDT history | grep password
      123  Sun 28 Aug 2016 03:33:29 AM PDT history | grep password
    
  2. 任何以一个空格开头的命令都不会包含在 bash 历史记录中。

  3. HISTIGNORE
    是一个以冒号分隔的模式列表,用于决定哪些命令行应保存在历史列表中。通过将此添加到
    .bashrc
    .bash_profile
    :

    来修改 bash 历史记录以忽略称为 xyz 的未来命令
    export HISTIGNORE=' :xyz'
    
  4. 禁用当前 shell 的历史记录。

    $ set +o history
    
  5. 完全清除命令历史。

    $ history -c
    

0
投票
  • 确定您使用的是哪个外壳。如果是 zsh 那么你的历史文件就是

    ~/.zsh_history
    。如果你使用的是 bash 那么它应该是
    ~/.bash_history

  • 在你做任何事情之前,备份相应的文件

$ cp -rfp ~/.zsh_history ~/.zsh_history-preserving-a-copy-is-sage-and-I-do-engage-in-such-sagacious-acts.

# in case we mess things up, otherwise we can remove it.
  • 然后您可以在任何编辑器中打开文件

    ~/.zsh_history
    。删除任何你想删除的命令。

  • 展开新的终端,你会看到,你想要消失的命令确实消失了!

© www.soinside.com 2019 - 2024. All rights reserved.