在进行软件开发时,经常需要在命令行命令中包含机密信息。典型的例子是设置将项目部署到服务器作为环境变量的凭据。
当我不想将某些命令存储在命令历史记录中时,如何执行它们?
必须没有人能够在.bash_history文件中搜索它们。是否有一种方法可以这样执行Bash命令?
在进行软件开发时,经常需要在命令行命令中包含机密信息。典型的例子是设置将项目部署到服务器作为环境变量的凭据。
当我不想将某些命令存储在命令历史记录中时,如何执行它们?
必须没有人能够在.bash_history文件中搜索它们。是否有一种方法可以这样执行Bash命令?
当前回答
这个命令可能会派上用场。这将不会记录所执行的命令
history -d $((HISTCMD-1)) && <Your Command Here>
其他回答
有几种方法可以实现这一点。这将历史文件的大小设置为0:
export HISTFILESIZE=0
这将历史文件设置为/dev/null,有效地禁用它:
export HISTFILE=/dev/null
对于单个命令,您可以在命令前面加上一个空格,这样它就不会保存在历史文件中。注意,这要求在$HISTCONTROL环境变量中包含ignorespace值(man bash和搜索ignorespace以获得更多详细信息)。
如果你正在使用Z shell (zsh),你可以运行:
setopt histignorespace
设置后,以空格开头的命令将从历史记录中排除。
你可以在.zshrc中使用别名来打开/关闭:
# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\
setopt hist_ignore_space;\
echo "Commands starting with space are now EXCLUDED from history."'
alias history-ignore-space-off='\
unsetopt hist_ignore_space;\
echo "Commands starting with space are now ADDED to history."'
John Doe和Cédric ROYER的答案的延伸。但是,这似乎对我有用。
<your_secret_command>; history -d $((HISTCMD-1))
您不应该在历史记录中看到该命令的条目。
下面是解释……
'history -d'从历史记录中删除所提到的条目。
HISTCMD存储下一个要执行的命令的command_number。因此,(HISTCMD-1)指的是最后执行的命令。
从Bash历史文件中删除某一行
您可以考虑使用没有历史记录的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