如何从非交互式 shell 给定的 HISTFILE 路径查看历史记录的输出?
How to view the output of history from a non-interactive shell given path to HISTFILE?
在 emacs 中,我想使用 shell-command-to-string
本质上检索类似 history | tail -n5
的内容。问题是 history
是一个内置的 bash(仅在交互模式下?)所以它不起作用。由于我只对装饰输出的只读快照感兴趣,有没有办法解析历史文件的内容(假设它是 ~/.bash_history
)并输出行号和日期作为 history
bash 命令呢?
换句话说,有没有办法做这样的事情:
(shell-command-to-string "history --pretty-dump-to-stdout-with-date-time-linenum --filename ~/.bash_history")
? (或者,也许是不同的解决方法?)
使history
命令输出一些东西
我预计 set -o history
会失败,因为它将使用历史文件 $HISTFILE
,该文件很可能未针对非交互式 shell 设置。假设历史存储在 ~/.bash_history
中,您可以执行 ...
HISTFILE=~/.bash_history; set -o history; history | tail -n5
但是,这会通过添加 history | tail -n5
来修改您的历史记录。更好的方法是在不启用历史记录的情况下读取历史文件:
history -r ~/.bash_history; history | tail -n5
来自您当前会话的命令
假设您在交互式终端会话中并执行...
$ myCommand
$ emacs # and inside emacs the shell command `history` as shown above
... 那么您很可能不会在历史记录中看到 myCommand
。这是因为 bash 仅在关闭会话时将历史记录写入历史文件。您可以使用 history -a
手动更新历史文件,因此以下应该有效:
$ myCommand
$ history -a
$ emacs # and inside emacs the shell command `history` as shown above
由于大多数人通常会忘记 history -a
,因此最好在您的 .bashrc
中自动执行此步骤,或者在每次提示时 (PROMPT_COMMAND="history -a
),或者仅针对 emacs ( emacs() { history -a; command emacs "$@"; }
).
漂亮的印刷
is there a way to do something like [...] --pretty-dump-to-stdout-with-date-time-linenum
history
命令的历史格式由HISTTIMEFORMAT
控制。在 emacs
.
中调用 history
之前必须设置和导出格式
在 emacs 中,我想使用 shell-command-to-string
本质上检索类似 history | tail -n5
的内容。问题是 history
是一个内置的 bash(仅在交互模式下?)所以它不起作用。由于我只对装饰输出的只读快照感兴趣,有没有办法解析历史文件的内容(假设它是 ~/.bash_history
)并输出行号和日期作为 history
bash 命令呢?
换句话说,有没有办法做这样的事情:
(shell-command-to-string "history --pretty-dump-to-stdout-with-date-time-linenum --filename ~/.bash_history")
? (或者,也许是不同的解决方法?)
使history
命令输出一些东西
我预计 set -o history
会失败,因为它将使用历史文件 $HISTFILE
,该文件很可能未针对非交互式 shell 设置。假设历史存储在 ~/.bash_history
中,您可以执行 ...
HISTFILE=~/.bash_history; set -o history; history | tail -n5
但是,这会通过添加 history | tail -n5
来修改您的历史记录。更好的方法是在不启用历史记录的情况下读取历史文件:
history -r ~/.bash_history; history | tail -n5
来自您当前会话的命令
假设您在交互式终端会话中并执行...
$ myCommand
$ emacs # and inside emacs the shell command `history` as shown above
... 那么您很可能不会在历史记录中看到 myCommand
。这是因为 bash 仅在关闭会话时将历史记录写入历史文件。您可以使用 history -a
手动更新历史文件,因此以下应该有效:
$ myCommand
$ history -a
$ emacs # and inside emacs the shell command `history` as shown above
由于大多数人通常会忘记 history -a
,因此最好在您的 .bashrc
中自动执行此步骤,或者在每次提示时 (PROMPT_COMMAND="history -a
),或者仅针对 emacs ( emacs() { history -a; command emacs "$@"; }
).
漂亮的印刷
is there a way to do something like [...]
--pretty-dump-to-stdout-with-date-time-linenum
history
命令的历史格式由HISTTIMEFORMAT
控制。在 emacs
.
history
之前必须设置和导出格式