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

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

必须没有人能够在.bash_history文件中搜索它们。是否有一种方法可以这样执行Bash命令?


当前回答

有几种方法可以实现这一点。这将历史文件的大小设置为0:

export HISTFILESIZE=0

这将历史文件设置为/dev/null,有效地禁用它:

export HISTFILE=/dev/null

对于单个命令,您可以在命令前面加上一个空格,这样它就不会保存在历史文件中。注意,这要求在$HISTCONTROL环境变量中包含ignorespace值(man bash和搜索ignorespace以获得更多详细信息)。

其他回答

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

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

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

下面是解释……

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

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

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

有几种方法可以实现这一点。这将历史文件的大小设置为0:

export HISTFILESIZE=0

这将历史文件设置为/dev/null,有效地禁用它:

export HISTFILE=/dev/null

对于单个命令,您可以在命令前面加上一个空格,这样它就不会保存在历史文件中。注意,这要求在$HISTCONTROL环境变量中包含ignorespace值(man bash和搜索ignorespace以获得更多详细信息)。

你可以用

export HISTFILE=/dev/null ;history -d $(history 1)

那就继续你的鬼把戏吧。将histfile设置为/dev/null将被记录到历史文件中,然而该条目将被轻松删除,并且不会显示任何痕迹(至少在历史文件中)。

而且,这是非永久性的。

在任何给定的Bash会话中,输入以下命令将历史文件设置为/dev/null:

export HISTFILE=/dev/null

注意,正如注释中指出的那样,这不会将会话中的任何命令写入历史记录!

请不要搅乱系统管理员的辛勤工作;)

Doodad的解决方案更加优雅。简单地取消变量:取消HISTFILE(谢谢!)

还可以使用以下命令:

echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')

我认为这是一个非常方便的命令。