bash提示和PROMPT_COMMAND

时间:2019-01-11 09:02:09

标签: linux bash

我试图结合一些在SO上找到的命令。以下是我要添加的更改中的Link1Link2

这是我的 .bashrc

中的代码
function timer_start {
        timer=${timer:-$SECONDS}
        Number="$!"
        if [ -n "$Number" ]
        then
                Pid=", PID:${Number}"
        fi
}

function timer_stop {
        Number="$?"
        Total_Time=$(($SECONDS - $timer))
        unset timer
        if [ $Total_Time -gt 30 ]
        then
                Timer_Show=", Sec:${Total_Time}"
        fi
        if [ "$Number" -ne "0" ]
        then
                Status_Code=", ERR:${Number}"
        fi

}

trap 'timer_start' DEBUG
PROMPT_COMMAND=timer_stop

PS1="[\w${Pid}${Status_Code}${Timer_Show}] "

但是代码根本不起作用。我的目标是在提示中输入错误代码$?)和进程ID $!)(如果不为零)。另外,我还希望在30秒内完成时,提示提示符显示已执行命令的时间戳

这是输出...

[~] ls bla
ls: Zugriff auf 'bla' nicht möglich: Datei oder Verzeichnis nicht gefunden
[~] sleep 360 &
[1] 2992525
[~] sleep 360
[1]+  Fertig                  sleep 360
[~] keepass &
[1] 32145
[~]

我的提示完全没有改变。相反,当我产生错误时,提示中应该显示错误代码,如下所示。

[~] ls bla
ls: Zugriff auf 'bla' nicht möglich: Datei oder Verzeichnis nicht gefunden
[~, Err:2]

当我将某些东西放到后台时,提示中应该显示一个PID。我不会一次将多个作业放在后台。但是可以捕获那些PID吗?

[~] sleep 360 &
[~, PID:2992525]

最后但并非最不重要的是,提示应显示上一次执行的命令的时间(以秒为单位),但仅在花费30秒以上才能完成。

[~] sleep 360
[1]+  Fertig                  sleep 360
[~, Sec:360]

我能提示出什么地方出了什么问题以及如何进行更改。谢谢

1 个答案:

答案 0 :(得分:1)

好的,这是一个coupla提示。

如果我对它的理解正确,那么您正在尝试在PS1中添加PID和后台进程的退出状态[您可能已经提到了这一点,而不是让我知道! ]我认为PID很容易-我的提示是将let tr; $('#test1234 tr').each(function () { if($(this).find('td:nth-child(1)').text().length){ tr = $(this); tr.find('td:nth-child(2)').text('') }else{ let td = $(tr).find('td:nth-child(2)'); let comma = td.text() !== "" ? ", " : ''; td.text(td.text() + comma + $(this).find('td:nth-child(2)').text()) $(this).remove() } }); 行移到timer_stop的最后一行。

获取退出状态将更加棘手。 $html_body是最近运行的命令的状态-不是最新的后台作业。我无法想出如何在不添加命令将状态存储到临时文件中的情况下掌握这些信息。

PS1="${lightBlue}..."

然后您可以在$?函数中获取状态值-当然,您可以将其包装到函数中。当您有多个长时间运行的命令时,可能会遇到麻烦-您需要为每个运行的命令修改临时文件名。