【发布时间】:2020-02-21 22:05:47
【问题描述】:
我知道 shell 内置函数已加载到内存中,我认为我可以在 /usr/bin 或 echo $PATH 的某个位置找到所有内置函数。我试图找出历史命令的工作原理。我的假设是它是从 ~/bash_history 读取的。所以我尝试了objdump -S $(which history)
which history
echo $?
1
这没有返回命令的路径,这使我知道历史二进制文件所在的位置。
type -t which
builtin
我认为这意味着它已加载到内存中。 shell 进程也会加载存储在echo $PATH 之外的内置函数
【问题讨论】:
-
如果
which是内置的,那么你的 shell 不是 bash。你真的在运行 zsh 吗? -
如果您已经了解
type,为什么不运行type history? :) -
...但是,是的,
history必须 是一个内置的 - 它如何支持诸如将 shell 的内存中历史记录刷新到磁盘而不是 shell 进程的一部分,因此可以访问该历史记录? -
感谢您指出这一点。我当时正在使用 bash。在这里复制了错误的命令。虽然我换了几次贝壳。只是想知道,shell日志文件是否存储在主目录中?
-
如果你指的是历史文件,有一个
HISTFILE变量控制它的存储位置(在 bash 中);默认为~/.bash_history。文件的位置和格式没有全球/通用标准。