在进行软件开发时,经常需要在命令行命令中包含机密信息。典型的例子是设置将项目部署到服务器作为环境变量的凭据。
当我不想将某些命令存储在命令历史记录中时,如何执行它们?
必须没有人能够在.bash_history文件中搜索它们。是否有一种方法可以这样执行Bash命令?
在进行软件开发时,经常需要在命令行命令中包含机密信息。典型的例子是设置将项目部署到服务器作为环境变量的凭据。
当我不想将某些命令存储在命令历史记录中时,如何执行它们?
必须没有人能够在.bash_history文件中搜索它们。是否有一种方法可以这样执行Bash命令?
当前回答
正如Doodad在评论中提到的,unset HISTFILE可以很好地做到这一点,但如果你还想删除一些历史,请回显$HISTFILE来获取历史文件的位置(通常是~/.bash_history),取消设置HISTFILE,并编辑~/。bash_history(或者不管HISTFILE是什么-当然它现在是未设置的,所以你不能读取它)。
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
那你就编辑了你的历史,还有你编辑历史的事实!
其他回答
有几种方法可以实现这一点。这将历史文件的大小设置为0:
export HISTFILESIZE=0
这将历史文件设置为/dev/null,有效地禁用它:
export HISTFILE=/dev/null
对于单个命令,您可以在命令前面加上一个空格,这样它就不会保存在历史文件中。注意,这要求在$HISTCONTROL环境变量中包含ignorespace值(man bash和搜索ignorespace以获得更多详细信息)。
还可以使用以下命令:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
我认为这是一个非常方便的命令。
如果您想删除所有历史记录,包括删除所有历史记录的事实,这是很方便的!
rm .bash_history;export HISTFILE=/dev/null;exit
正如Doodad在评论中提到的,unset HISTFILE可以很好地做到这一点,但如果你还想删除一些历史,请回显$HISTFILE来获取历史文件的位置(通常是~/.bash_history),取消设置HISTFILE,并编辑~/。bash_history(或者不管HISTFILE是什么-当然它现在是未设置的,所以你不能读取它)。
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
那你就编辑了你的历史,还有你编辑历史的事实!
这个命令可能会派上用场。这将不会记录所执行的命令
history -d $((HISTCMD-1)) && <Your Command Here>