如何从 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 扩展生成带有$''
. 的控制字符)。