BASH: zjištění PID posledního foreground příkazu

"Petr \"Qaxi\" Klíma" qaxi na seznam.cz
Čtvrtek Květen 24 15:33:12 CEST 2007


Zdravím

dá se v bash zjistit PID posledního foreground příkazu ?


mám tento "šílený" prompt viz. dole

normální výstup je:
(dovolím si ho uvést černobíle, jinak hraje barvičkama)

[15:23]-[~]
[klima na klimapc]$
[15:23]-[~]
[klima na klimapc]$ cd tmp
/home/klima/tmp
[15:23]-[~/tmp]
[klima na klimapc]$

pokud nastane v commandu chyba vypíše mi $? (last exit status)

[15:23]-[~/tmp]
[klima na klimapc]$
[15:25]-[~/tmp]
[klima na klimapc]$ false
[15:25]-[~/tmp]
[klima na klimapc](1)$


co neumim udělat je aby pro 1 command vypsal $? jen 1x, ale aby se 
nestalo tohle

[15:27]-[/tmp]
[klima na klimapc]$
[15:27]-[/tmp]
[klima na klimapc]$ false
[15:27]-[/tmp]
[klima na klimapc](1)$ false
[15:27]-[/tmp]
[klima na klimapc]$

prostě pokud jdou za sebou stejná $? tak ho vypíše jen poprvé ...

Pokud odstraním REMEMBER_LAST (nebo nastavím na 0) tak to funguje takto

[klima na klimapc]$
[15:30]-[~]
[klima na klimapc]$ false
[15:30]-[~]
[klima na klimapc](1)$
[15:30]-[~]
[klima na klimapc](1)$
[15:30]-[~]
[klima na klimapc](1)$
[15:30]-[~]
[klima na klimapc](1)$
[15:30]-[~]
[klima na klimapc](1)$ true
[15:30]-[~]
[klima na klimapc]$


Nápad je spárovat PID předchozího příkazu a $? a to ukládat do 
REMEMBER_LAST.

Ale kde vzít PID předchozího příkazu?


***********************************************-
export PROMPT_COMMAND=bash_prompt_command
export REMEMBER_LAST=0

# Definice barev
_BK='\033[0;30m'
_BKb='\033[1;30m'
_BL='\033[0;34m'
_BLb='\033[1;34m'
_CY='\033[0;36m'
_CYb='\033[1;36m'
_DE='\033[0;0m'
_GR='\033[0;32m'
_GRb='\033[1;32m'
_MA='\033[0;35m'
_MAb='\033[1;35m'
_RE='\033[0;31m'
_REb='\033[1;31m'
_WH='\033[0;37m'
_WHb='\033[1;37m'
_YE='\033[0;33m'
_YEb='\033[1;33m'
_bBK='\033[40m'
_bBL='\033[44m'
_bCY='\033[46m'
_bGR='\033[42m'
_bMA='\033[45m'
_bRE='\033[41m'
_bWH='\033[47m'
_bYE='\033[43m'

bash_prompt_command ()
{
     local ORIGLAST=$?;
     local LAST=${ORIGLAST};
     local USER_ID=`id -r -u`;
     local PS1_H="\[$_WH\][\[$_RE\]\A\[$_WH\]]-[\[$_CYb\]\w\[$_WH\]]";
     local PS1_D="[\[$_CY\]\u\[\[$_WH\]@\[$_CY\]\h\[$_WH\]]";
     [ $USER_ID -eq "0" ] && {
         PS1_H="\[$_RE\][\A]-[\w]";
         PS1_D="[\u@\h]"
     };
     if [ ${REMEMBER_LAST} -eq ${LAST} -o ${LAST} -eq 0 ]; then
         LAST='';
     else
         LAST="\[$_WH\](\[$_YEb\]${LAST}\[$_WH\])";
     fi;
     REMEMBER_LAST=${ORIGLAST};
     export PS1="$PS1_H\n$PS1_D${LAST}\$\[$_DE\] "
}
***********************************************-

-- 

    Petr Klíma

    e-mail:  qaxi na seznam.cz




Další informace o konferenci Linux