我正在尝试为 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 上运行
我不会自动化一次性问题。据推测,手动删除敏感的历史条目需要不到 5 分钟的时间。下面我将展示如何防止它们在未来发生。
使用 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
任何以一个空格开头的命令都不会包含在 bash 历史记录中。
HISTIGNORE
是一个以冒号分隔的模式列表,用于决定哪些命令行应保存在历史列表中。通过将此添加到 .bashrc
或 .bash_profile
: 来修改 bash 历史记录以忽略称为 xyz 的未来命令
export HISTIGNORE=' :xyz'
禁用当前 shell 的历史记录。
$ set +o history
完全清除命令历史。
$ history -c
确定您使用的是哪个外壳。如果是 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
。删除任何你想删除的命令。
展开新的终端,你会看到,你想要消失的命令确实消失了!