我最近用 Ubuntu Gnome(随 Gnome DE 提供)替换了我的 Ubuntu 14.04 安装。但我注意到,一旦终端会话关闭,bash 历史记录就不会保存。一旦我关闭一个终端会话并打开一个新的会话,并运行该命令history
,除了history
命令本身之外,它不会显示任何内容。有没有办法解决这个问题?
谢谢
我使用的是 Ubuntu 21.10。如果我搞砸了,我可以使用 重新运行最后一个命令!!
。这是一个例子:
$ apt update
Reading package lists... Done
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)
W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)
$ sudo !!
sudo apt update
[sudo] password for [me]:
...
Fetched 336 kB in 2s (206 kB/s)
Reading package lists... Done
Building dependency tree
Reading state …
Run Code Online (Sandbox Code Playgroud) 如果我向上滚动或使用Ctrlr搜索并在历史记录中向上移动,如何向下返回到清晰的行?我知道我可以用Ctrle,清除Crtlu,但这会修改它们。Ctrlc除了重置外壳之外还有官方方法吗?
最近我在我的终端打字
username:~$ !!
Run Code Online (Sandbox Code Playgroud)
并从bash得到错误:
bash: !!: command not found
Run Code Online (Sandbox Code Playgroud)
同时,它在超级用户下完成时成功。
我调查了我用户的 PATH 内容,没有发现任何可疑之处:
/home/username/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Run Code Online (Sandbox Code Playgroud)
这是输出:
username:~$ history | tail
1993 date
1994 cal
1995 vcal
1996 uptime
1997 uname
1998 uptime
1999 uname
2000 uptime
2001 uname
2002 history | tail
Run Code Online (Sandbox Code Playgroud)
其他:
username:~$ echo foo
foo
username:~$ !!
bash: !!: command not found
Run Code Online (Sandbox Code Playgroud) 如何找到我在终端中运行的旧命令?
我使用了一个 appengine 命令,并希望在我的本地命令历史记录中找到它,而无需再次在线研究它。
如何删除 bash 历史记录中的最后 5 行?所以当我重新加载 Ubuntu 服务器或重新启动它时,它们根本就不存在?
history -c 只从当前会话中删除它,但是当我重新登录时,我再次看到命令,我想清除最后 5 个。
我跑了:
history
Run Code Online (Sandbox Code Playgroud)
然后我会看到命令的编号,例如:
489 cd ..
490 cd .zshrc
491 cat .zshrc
Run Code Online (Sandbox Code Playgroud)
然后我运行例如:
history -d 489
history -c
Run Code Online (Sandbox Code Playgroud)
然后我关闭终端并重新打开它,我仍然看到第 489 行它只在当前会话中被删除,我如何从所有会话中永久删除它?
请指教。
如果我不小心在 bash 中输入了我的密码或任何其他敏感内容,我可以使用 轻松删除该行history -d ROW#
,但我总是留下history -d ROW#
历史记录中的命令,向所有人显示有人纠正了错误。
我可以在命令中附加一些内容以防止它出现在 bash 历史记录中吗?
我对我的 ubuntu 终端会话感到非常困惑,它似乎!
用看似随机的命令替换了命令中以数字开头的部分。它通过!87
将其替换为screen -l
和!88
并替换为ls
.
任何想法为什么会发生这种情况将不胜感激。
在 Bash(以及 WSL 中的 Bash)中,多行编写的命令可以使用向上/向下箭头正确回调,内置history
命令也可以正确报告它们(直到我仍然登录 bash)。
但是在退出bash
并按下向上/向下箭头后,多行命令每个都显示为单独的条目,这是因为cat ~/.bash_history
已将命令放在多个单独的条目上并在此处写入问题;该history
命令的结果搞砸了。
我已经设置了这些选项 ~/.bashrc
shopt -s cmdhist lithist
HISTTIMEFORMAT='%F %T '
Run Code Online (Sandbox Code Playgroud)
现在写入问题已修复,但history
命令仍以多行和单独的条目报告(现在读取问题)。
Bash 版本是 4.3,在 v4.4 上有同样的问题
多年来一直有这个错误报告,但还没有解决方案。
更新:
还要提到的是,即使在退出 Bash 之后,以下多行命令作为示例也能正确显示:
for i in {1..10}
do
echo $i
done
Run Code Online (Sandbox Code Playgroud)
但这失败了:
awk '
{ print $1}' <<<'first last'
Run Code Online (Sandbox Code Playgroud)
更新 2:
上面提到的问题在 Bash v5.0.0+ 中得到修复,该问题已更改为将“时间戳作为分隔符”之间的条目识别为命令的单个条目(必须设置HISTTIMEFORMAT、cmdhist和lithist)。