据我所知,单个 shell 的历史记录仅在 shell 关闭时附加到 .bash_history 文件中。这意味着我经常在崩溃/内核崩溃时丢失单个 shell 的历史记录。
为什么历史记录只在关闭会话时写入?有没有办法在执行时写入每个命令?有什么理由我不希望在执行时写入每个命令(例如,写入一个巨大的 bash_history 文件时的性能问题)?
(我正在使用 Mac OS X 10.6 并使用 iTerm 同时运行许多选项卡式终端。我设置了 histappend 以及其他一些选项。
export HISTSIZE=1000000
export HISTTIMEFORMAT="%d/%m/%y %T "
shopt -s histappend
Run Code Online (Sandbox Code Playgroud)
)
我想要一个无限的历史文件zsh。据我所知,我只能将 HISTSIZE 和 SAVEHIST 设置为一个大数字。
我似乎无法在 Notepad++ 中找到显示您所做的所有操作的历史记录。有时您可能不再确定下一个撤消操作会做什么。
这个功能真的不存在还是我还没找到?
如果我想查看 root 的 bash 历史记录,为什么我不能直接运行sudo history?当我这样做时,它说找不到命令历史记录,但是如果我在没有 sudo 的情况下运行它,它运行良好。
编辑:这是一个重复的答案,但不是链接的重复问题。提出任何一个问题的人都不知道它是一个 shell 内置命令,而不是一个二进制命令。
[CTRL]+[r]将打开reverse-i-search提示符。注意:搜索查询将仅命中完整命令的中间,而不是正常 zsh 搜索所需的开头匹配。
Powershell 停止使用其持久历史记录 (Windows 11)。当我启动新的 Powershell 实例时,以前会话中的命令不会显示。一旦我第一次在新会话中使用命令,就可以通过 F8/箭头等来调用它们。
到目前为止我检查/发现的内容:
检查历史文件,C:\Users\[username]\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt我注意到命令不再保存在那里。
一旦我输入命令(Get-PSReadLineOption).HistorySavePath(它返回我在上一个要点中提到的路径),一切都会再次正常工作。已经保存在那里的命令可以通过 F8 等再次访问,并且新命令也会再次保存到历史文件中。
powershell -noexit Set-PSReadlineOption -HistorySavePath "C:\Users\admin\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt"通过脚本启动 powershell 也可以。
我还没有确切地知道为什么 Powershell 默认情况下不再使用历史文件。据我记得它以前可以工作,但我不确定为什么它停止工作。但从历史文件的内容来看,已经是很久之前的事了。
知道如何让它再次工作,而不需要在每次启动时应用解决方法(例如手动输入“历史记录保存命令”或使用“参数来启动它”)吗?
补充1:
这些命令给出以下输出(注意:使用其中任何一个后,历史记录再次正常工作,命令被保存到历史记录中,并且除了已使用的第一个命令并“重新激活”历史记录之外,可以调用完整内容)
PS C:\> (Get-PSReadlineOption).HistorySaveStyle
SaveIncrementally
PS C:\> (Get-PSReadlineOption).HistoryNoDuplicates
True
PS C:\> (Get-PSReadlineOption).MaximumHistoryCount
4096
Run Code Online (Sandbox Code Playgroud)
补充2:
$PROFILE给我以下输出(该命令不会影响历史记录的行为)。注意:列出的文件不存在于指定的目录中:
PS C:\> $PROFILE | Get-Member -Type NoteProperty
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
AllUsersAllHosts NoteProperty string AllUsersAllHosts=C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
AllUsersCurrentHost NoteProperty string AllUsersCurrentHost=C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts NoteProperty string CurrentUserAllHosts=C:\Users\username\Documents\WindowsPowerShell\profile.ps1
CurrentUserCurrentHost NoteProperty string CurrentUserCurrentHost=C:\Users\username\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Run Code Online (Sandbox Code Playgroud)
添加 3 …
可能的重复:
为 Vista 管理员启用运行对话框的历史记录
在我的 PC(运行 Windows 7 Professional - 64 位)中,运行对话框不会保留以前命令的历史记录!因此,输入命令时不会显示任何建议!
如何启用此功能?

我想制作一个简单的脚本bash_history,根据用户输入的行号从 中删除一行。
echo -n "Delete History Line Number: "
read num
history -d $num
Run Code Online (Sandbox Code Playgroud)
错误是“历史位置超出范围”(它不应该是,我使用的是范围内的数字)。
为什么这不起作用?
我正狂热地按CTRL+R来查找我不久前使用过的一些命令,但突然间我找到了它。通过反射,我继续点击CTRL+ R,将它传递给 shell 历史中更远的东西。如何返回我刚刚通过的命令,而不必重新开始整个搜索?
我知道为什么要 ctrl+c杀死程序;我对为什么选择“c”而不是其他字母的历史更感兴趣,因为它(显然)没有语义意义。
如果有人知道这背后的历史(以及其他诸如ctrl+dEOF的历史),那就太棒了。
command-history ×10
bash ×5
search ×2
zsh ×2
history ×1
linux ×1
notepad++ ×1
powershell ×1
run-dialog ×1
shell ×1
sudo ×1
undo ×1
windows-11 ×1
windows-7 ×1