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

Fal*_*rri 6 bash prompt

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

~/下载$密码
下载
~/下载$回声!!:p
回声密码

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

我想我不是很清楚。我需要存储上次运行的命令,以便我可以在输出之后和下一个提示之前重新显示它。例如,这就是我希望输出的样子:

~/下载$密码
下载

密码
~/下载$

我正在这样做,我正在更改我的.bashrc文件中的提示

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

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

Gil*_*il' 7

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

PROMPT_COMMAND='echo -en "\033[38;5;2m"; history 1; echo -en "\033[0m\n"'
Run Code Online (Sandbox Code Playgroud)

这会在命令文本之前打印一个数字。这是删除数字的版本。(如果您超过 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
Run Code Online (Sandbox Code Playgroud)

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