打印(保存)最后一个 bash 输入命令

打印(保存)最后一个 bash 输入命令

如何从 bash 获取最后执行的命令?我知道 !!:p 打印最后一个命令,但似乎除了 bash 提示符之外我不能在任何地方使用它。我尝试过echo !!:p,但打印出来了

〜/下载$ pwd
下载
〜/下载$ echo !!:p
回显密码

我想在PROMPT_COMMAND变量中使用它,所以我需要将它作为字符串获取,这样我就可以将其打印出来。是否有捷径可寻?我是不是找错地方了?

我想我还不清楚。我需要存储最后运行的命令,以便可以在输出之后和下一个提示之前重新显示它。例如,我希望输出如下所示:

〜/下载$ pwd
下载

密码
〜/下载$

我正在更改.bashrc文件中的提示

PROMPT_COMMAND='echo -en "\033[38;5;2m"!!:p"\033[0m\n"'
PS1='\W\$'

但是 !!:p 只能在 bash 提示符下正常工作。那么如何存储最后一条命令以便以后重新打印呢?

答案1

history您可以使用内置命令访问刚刚执行的命令行。 (我不知道为什么history 1打印刚刚执行的命令行但fc -nl -1打印前一个命令,就像一样fc -nl 0。)

PROMPT_COMMAND='echo -en "\033[38;5;2m"; history 1; echo -en "\033[0m\n"'

这会在命令文本之前打印一个数字。这是删除该号码的版本。 (如果超过 99999 历史行,可能会不正确,我不知道 bash 如何格式化该数字。)

prompt_function () {
  local prompt_history="$(history 1)"
  prompt_history=${prompt_history:7}
  echo -En $'\033[38;5;2m'"$prompt_history"$'\033[0m\n'
}
PROMPT_COMMAND=prompt_function

(请注意,这echo -en ..."$prompt_history"...会在命令行中展开反斜杠,因此我使用echo -E并让 shell 扩展生成带有$''. 的控制字符)。

相关内容