为什么ksh
history -0
(最后一个命令,即历史命令本身)有效,但却zsh
失败了(仅history -1
在我的 zsh 上有效)。我尝试zsh -f
使用默认选项,但仍然失败。
我Version AJM 93u+ 2012-08-01
在 MacOS 上使用 ksh 版本和 Zsh v5.9。
为什么ksh
history -0
(最后一个命令,即历史命令本身)有效,但却zsh
失败了(仅history -1
在我的 zsh 上有效)。我尝试zsh -f
使用默认选项,但仍然失败。
我Version AJM 93u+ 2012-08-01
在 MacOS 上使用 ksh 版本和 Zsh v5.9。
据我所知,命令行在运行后会被添加到 zsh 的历史记录中,即成为历史记录。
如果您有一个特定的用例,您需要一个命令来知道哪个命令行导致其执行(假设它是从用户输入的某些代码调用的,而不是通过其他方式(如陷阱)调用的),您可以执行以下操作:
或者:
然后:
preexec
是在输入完整命令行之后执行之前调用的钩子,完整代码在 中$1
。这里,我们只是将该代码记录在 中$CURRENT_COMMAND_LINE
。在陷阱中
DEBUG
,另请参见ZSH_DEBUG_CMD
包含正在执行的命令的表示的变量(与用户输入的可能导致或不导致其执行的最后一条命令行相反)。(查看第一个 DEBUG 陷阱执行实际上向您显示了所运行的命令
preexec
,因此那里的“命令行”有点误导)。另请参阅
zle-line-finish
在行编辑器退出时调用的 ZLE 钩子小部件,您可以在其中找到当前命令行(以及在打印了/提示的$BUFFER
多行命令的情况下的先前行)。$PS2
$PROMPT2
$PREBUFFER
例如,将使用输入的每行的长度更新终端仿真器窗口标题。