在进行软件开发时,经常需要在命令行命令中包含机密信息。典型的例子是设置将项目部署到服务器作为环境变量的凭据。
当我不想将某些命令存储在命令历史记录中时,如何执行它们?
必须没有人能够在.bash_history文件中搜索它们。是否有一种方法可以这样执行Bash命令?
在进行软件开发时,经常需要在命令行命令中包含机密信息。典型的例子是设置将项目部署到服务器作为环境变量的凭据。
当我不想将某些命令存储在命令历史记录中时,如何执行它们?
必须没有人能够在.bash_history文件中搜索它们。是否有一种方法可以这样执行Bash命令?
当前回答
您可以考虑使用没有历史记录的shell,例如maybe
/bin/sh << END
your commands without history
END
(也许/bin/dash或/bin/带状可能比/bin/sh更合适)
或者更好的是,使用批处理实用程序,例如,
batch << EOB
your commands
EOB
历史记录将包含sh或批处理,这不是很有意义。
其他回答
在任何给定的Bash会话中,输入以下命令将历史文件设置为/dev/null:
export HISTFILE=/dev/null
注意,正如注释中指出的那样,这不会将会话中的任何命令写入历史记录!
请不要搅乱系统管理员的辛勤工作;)
Doodad的解决方案更加优雅。简单地取消变量:取消HISTFILE(谢谢!)
您可以考虑使用没有历史记录的shell,例如maybe
/bin/sh << END
your commands without history
END
(也许/bin/dash或/bin/带状可能比/bin/sh更合适)
或者更好的是,使用批处理实用程序,例如,
batch << EOB
your commands
EOB
历史记录将包含sh或批处理,这不是很有意义。
你可以用
export HISTFILE=/dev/null ;history -d $(history 1)
那就继续你的鬼把戏吧。将histfile设置为/dev/null将被记录到历史文件中,然而该条目将被轻松删除,并且不会显示任何痕迹(至少在历史文件中)。
而且,这是非永久性的。
正如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
那你就编辑了你的历史,还有你编辑历史的事实!
以空格开始命令,它将不会包含在历史记录中。
注意,这需要设置环境变量$HISTCONTROL。
检查以下命令是否返回ignorespace或 ignoreboth: echo $ HISTCONTROL 如果缺少环境变量,可以将下面的行添加到Bash概要文件中。例如,文件%HOME/.bashrc。 出口HISTCONTROL = ignorespace
在再次获取概要文件之后,以空格为前缀的命令将不会被写入$HISTFILE。