在进行软件开发时,经常需要在命令行命令中包含机密信息。典型的例子是设置将项目部署到服务器作为环境变量的凭据。

当我不想将某些命令存储在命令历史记录中时,如何执行它们?

必须没有人能够在.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

那你就编辑了你的历史,还有你编辑历史的事实!

其他回答

John Doe和Cédric ROYER的答案的延伸。但是,这似乎对我有用。

<your_secret_command>; history -d $((HISTCMD-1))

您不应该在历史记录中看到该命令的条目。

下面是解释……

'history -d'从历史记录中删除所提到的条目。

HISTCMD存储下一个要执行的命令的command_number。因此,(HISTCMD-1)指的是最后执行的命令。

从Bash历史文件中删除某一行

这个命令可能会派上用场。这将不会记录所执行的命令

history -d $((HISTCMD-1)) && <Your Command Here>

您可以考虑使用没有历史记录的shell,例如maybe

/bin/sh << END
   your commands without history
END

(也许/bin/dash或/bin/带状可能比/bin/sh更合适)

或者更好的是,使用批处理实用程序,例如,

batch << EOB
   your commands
EOB

历史记录将包含sh或批处理,这不是很有意义。

如果您想删除所有历史记录,包括删除所有历史记录的事实,这是很方便的!

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

那你就编辑了你的历史,还有你编辑历史的事实!