执行命令而不保留其历史记录[关闭]
- 2024-11-06 08:35:00
- admin 原创
- 29
问题描述:
在进行软件开发时,经常需要在命令行命令中包含机密信息。典型的例子是将项目部署到服务器的凭据设置为环境变量。
当我不想将某些命令存储在命令历史记录中时,如何执行它们?
没有人能够在.bash_history
文件中搜索它们。有没有办法通过这种方式执行 Bash 命令?
解决方案 1:
以空格开始您的命令,它将不会包含在历史记录中。
$HISTCONTROL
请注意,这确实需要设置环境变量。
检查以下命令是否返回
ignorespace
或ignoreboth
:
echo $HISTCONTROL
如果缺少环境变量,可以添加以下行到 Bash 配置文件中。例如,到文件
%HOME/.bashrc
。
export HISTCONTROL=ignorespace
再次获取配置文件后,以空格为前缀的命令将不会写入$HISTFILE
。
解决方案 2:
在任何给定的 Bash 会话中,通过键入以下内容将历史文件设置为 /dev/null:
export HISTFILE=/dev/null
请注意,正如评论中指出的那样,这不会将该会话中的任何命令写入历史记录!
请不要干扰系统管理员的辛勤工作;)
Doodad 的解决方案更优雅。只需取消设置变量即可:(unset HISTFILE
谢谢!)
解决方案 3:
echo "discreet";history -d $(history 1)
解决方案 4:
John Doe和Cédric ROYER 答案的延伸。但是,这似乎对我有用。
<your_secret_command>; history -d $((HISTCMD-1))
您不应该在历史记录中看到该命令的条目。
以下是解释...
'history -d' 从历史记录中删除提到的条目。
HISTCMD 存储下一个要执行的命令的命令编号。因此,(HISTCMD-1) 指的是最后执行的命令。
从 Bash 历史文件中删除某一行
解决方案 5:
如果您使用Z shell ( zsh
),您可以运行:
setopt histignorespace
设置后,每个以空格开头的命令都将从历史记录中排除。
您可以使用别名来.zshrc
打开/关闭此功能:
# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\nsetopt hist_ignore_space;\necho "Commands starting with space are now EXCLUDED from history."'
alias history-ignore-space-off='\nunsetopt hist_ignore_space;\necho "Commands starting with space are now ADDED to history."'
解决方案 6:
你可能会考虑使用没有历史记录的 shell,比如
/bin/sh << END
your commands without history
END
(或许/bin/dash
或者/bin/sash
可能比更合适/bin/sh
)
或者更好的是,使用批处理实用程序,例如,
batch << EOB
your commands
EOB
那么历史记录将包含sh
或,batch
但意义不大。
解决方案 7:
你可以通过以下方式开始你的课程
export HISTFILE=/dev/null ;history -d $(history 1)
然后继续你的偷偷摸摸的行动。将 histfile 设置为/dev/null
将记录到历史文件中,但此条目将被轻易删除,并且不会显示任何痕迹(至少在历史文件中)。
此外,这不是永久性的。
解决方案 8:
正如Doodad 在评论中提到的那样,unset HISTFILE
这很好,但如果您还想删除一些历史记录,请echo $HISTFILE
获取历史文件位置(通常是~/.bash_history
),unset HISTFILE
然后编辑~/.bash_history
(或任何内容HISTFILE
- 当然是现在unset
,所以您无法读取它)。
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
那么你就编辑了你的历史,而且事实上你也编辑了它!
解决方案 9:
您还可以使用以下命令:
echo toto; history -d $(history | sed -n '$s/s*([0-9]*)s*.*$//p')
我认为这是一个非常便携的命令。
解决方案 10:
有几种方法可以实现这一点。这将历史文件的大小设置为 0:
export HISTFILESIZE=0
这将历史文件设置为/dev/null
,从而有效地禁用它:
export HISTFILE=/dev/null
对于单个命令,您可以在命令前添加空格,这样它就不会保存在历史文件中。请注意,这要求您ignorespace
在$HISTCONTROL
环境变量中包含该值(man bash 并搜索ignorespace
以了解更多详细信息)。
解决方案 11:
你只需要运行:
$ set +o history
要查看更多,请运行:
$ man set
解决方案 12:
如果您想删除所有历史记录(包括已删除所有历史记录的事实),这非常方便!
rm .bash_history;export HISTFILE=/dev/null;exit
解决方案 13:
此命令可能会派上用场。这不会记录执行的命令
history -d $((HISTCMD-1)) && <Your Command Here>
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件