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