IQA*_*eas 8 bash .bash-profile
我有一个定义的函数.bashrc,显示上一个命令是否成功完成(从完整版本简化):
function previous_command_status()
{
if [ $? -eq 0 ]; then
echo "Command successful"
else
echo "Command failed with exit code $exit_code"
fi
}
PROMPT_COMMAND="previous_command_status"
Run Code Online (Sandbox Code Playgroud)
问题是,Command successful当我开始提示时立即显示,即使我还没有"正式"运行任何命令.第二个(并且出于同样的原因),脚本显示Command successful(或最后一个"真实"命令的输出),即使我所做的只是按下返回按钮而没有实际执行命令(示例输出).
如果命令实际运行,我怎么能让脚本只显示消息?
正如其他人所提到的,不需要在提示中显示这么长的消息。以下是Bash我使用的提示:

正如您所看到的,提示中的退出值在非零时会变为红色,因此您可以轻松地知道该命令刚刚失败。如果命令被信号终止,信号编号和名称也会显示。在上面的屏幕截图中,130:2:INT表示最后一个命令以 (= 128 + 2) 退出,并被信号( )130终止。2SIGINT
以下是 中的代码bashrc:
function _PS1_command()
{
local lastexit=$?
local ESC=$'\033'
(( lastexit )) && g_PS1_Qcolor="$ESC[1;31m" || g_PS1_Qcolor=
g_PS1_signal=
if (( lastexit > 128 )) && kill -l $(( lastexit - 128 )) > /dev/null
then
(( g_PS1_signal = lastexit - 128 ))
g_PS1_signal="$g_PS1_signal:$( kill -l $g_PS1_signal )"
fi
return $lastexit
}
PROMPT_COMMAND=_PS1_command
PS1='[\w $g_PS1_Qcolor$?${g_PS1_signal:+:}$g_PS1_signal\e[0m] # '
Run Code Online (Sandbox Code Playgroud)