История изменений
Исправление Kroz, (текущая версия) :
Для рута:
PS1='\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]> '
Для kroz показывает статусы:
- ftp (запуск, индикатор подключения)
- торренты (запуск)
- sshd (запуск, индикатор подключения)
- apache (запуск)
- svn (запуск)
- emerge (запуск, статус устновки пакетов: сколько всего должно быть установлено и какой по счету устанавливается сейчас)
Каждый статус выводится одной буквой, которая меняет цвет в зависимости от... Только emerge позволено выводить цифры - кол-во пакетов. Так что много места не занимает. Очень удобно.
function _SystemStatus()
{
SERVICES="ftsave"
RESULT=""
# Standard services
f_SERVICE="proftpd"
t_SERVICE="transmission-daemon"
s_SERVICE="sshd"
a_SERVICE="apache2"
v_SERVICE="svnserve"
# Statuses, colors
C_NONE="\[\033[0;37m\]"
C_IDLE="\[\033[1;37m\]"
C_CRTITICAL="\[\033[7;31m\]"
C_STAT1="\[\033[1;33m\]"
C_RESET="\[\033[0m\]"
while [[ -n "$SERVICES" ]]; do
I="${SERVICES:0:1}"
SERVICES="${SERVICES:1}"
STATUS="${I}_STATUS"
eval $STATUS="NONE"
SERVICE="${I}_SERVICE"
if [[ -n "$SERVICE" ]]; then
A=`/etc/init.d/${!SERVICE} status 2>/dev/null` ;
if [[ "${A##* }" = "started" ]] ; then
eval $STATUS="IDLE"
fi
fi
VALUE="$I"
case "$I" in
"s" ) # ssh
S_CONNECTIONS=`who | while read U C D T S ; do [[ -n "$S" ]] && [[ "${S:1:1}" != ":" ]] && echo "$U" ; done`
[[ -n "$S_CONNECTIONS" ]] && s_STATUS="CRTITICAL"
;;
"f" ) # ftp
S_CONNECTIONS=`netstat -n --protocol inet 2>/dev/null | grep ':21 ' | while read P C1 C2 S D E ; do [[ "$E" = "ESTABLISHED" ]] && echo "$S" ; done`
[[ -n "$S_CONNECTIONS" ]] && f_STATUS="STAT1"
;;
"e" ) # emerge
# if we have merge running
e_A=`ps ax -o comm= | grep "emerge" | head -n 1 `
if [[ -n "$e_A" ]] ; then
e_STATUS="IDLE"
# Note: there should be permiossion to read /var/log/emerge.log
# emerge started time
e_eT=`cat /var/log/emerge.log | grep "Started emerge on: " | tail -n 1`
e_eT="${e_eT:0:10}"
# emerge log record time
e_A=`cat /var/log/emerge.log | grep "..........: >>> emerge" | tail -n 1`
e_lT="${e_A:0:10}" # Log record time
if [[ "$e_lT" -gt "$e_eT" ]]; then
e_M=`expr match "$e_A" '.*(\([0-9]*\) of'`
e_N=`expr match "$e_A" '.*([0-9]* of \([0-9]*\)'`
[[ "$e_M" != "" ]] && if [[ "$e_N" != "" ]]; then
VALUE="$e_M/$e_N"
e_STATUS="STAT1"
fi
fi
fi
esac
######## Output ########
# TODO: more detailed output - if user wants to see details
# For prompt
STATUS="${I}_STATUS";STATUS="${!STATUS}"
COLOR="C_$STATUS";COLOR="${!COLOR}"
[[ "$STATUS" != "NONE" ]] && RESULT="${RESULT}${COLOR}${VALUE}${C_RESET}"
done
[[ -n "$RESULT" ]] && RESULT="[${RESULT}]"
PS1="[]\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]> "
PS1="${PS1/[]/${RESULT}}"
}
PROMPT_COMMAND="_SystemStatus"
Исходная версия Kroz, :
Для рута:
PS1='\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]> '
Для kroz - показывает статусы:
- ftp (запуск, индикатор подключения)
- торренты (запуск)
- sshd (запуск, индикатор подключения)
- apache (запуск)
- svn (запуск)
- emerge (запуск, статус устновки пакетов: сколько всего должно быть установлено и какой по счету устанавливается сейчас)
function _SystemStatus()
{
SERVICES="ftsave"
RESULT=""
# Standard services
f_SERVICE="proftpd"
t_SERVICE="transmission-daemon"
s_SERVICE="sshd"
a_SERVICE="apache2"
v_SERVICE="svnserve"
# Statuses, colors
C_NONE="\[\033[0;37m\]"
C_IDLE="\[\033[1;37m\]"
C_CRTITICAL="\[\033[7;31m\]"
C_STAT1="\[\033[1;33m\]"
C_RESET="\[\033[0m\]"
while [[ -n "$SERVICES" ]]; do
I="${SERVICES:0:1}"
SERVICES="${SERVICES:1}"
STATUS="${I}_STATUS"
eval $STATUS="NONE"
SERVICE="${I}_SERVICE"
if [[ -n "$SERVICE" ]]; then
A=`/etc/init.d/${!SERVICE} status 2>/dev/null` ;
if [[ "${A##* }" = "started" ]] ; then
eval $STATUS="IDLE"
fi
fi
VALUE="$I"
case "$I" in
"s" ) # ssh
S_CONNECTIONS=`who | while read U C D T S ; do [[ -n "$S" ]] && [[ "${S:1:1}" != ":" ]] && echo "$U" ; done`
[[ -n "$S_CONNECTIONS" ]] && s_STATUS="CRTITICAL"
;;
"f" ) # ftp
S_CONNECTIONS=`netstat -n --protocol inet 2>/dev/null | grep ':21 ' | while read P C1 C2 S D E ; do [[ "$E" = "ESTABLISHED" ]] && echo "$S" ; done`
[[ -n "$S_CONNECTIONS" ]] && f_STATUS="STAT1"
;;
"e" ) # emerge
# if we have merge running
e_A=`ps ax -o comm= | grep "emerge" | head -n 1 `
if [[ -n "$e_A" ]] ; then
e_STATUS="IDLE"
# Note: there should be permiossion to read /var/log/emerge.log
# emerge started time
e_eT=`cat /var/log/emerge.log | grep "Started emerge on: " | tail -n 1`
e_eT="${e_eT:0:10}"
# emerge log record time
e_A=`cat /var/log/emerge.log | grep "..........: >>> emerge" | tail -n 1`
e_lT="${e_A:0:10}" # Log record time
if [[ "$e_lT" -gt "$e_eT" ]]; then
e_M=`expr match "$e_A" '.*(\([0-9]*\) of'`
e_N=`expr match "$e_A" '.*([0-9]* of \([0-9]*\)'`
[[ "$e_M" != "" ]] && if [[ "$e_N" != "" ]]; then
VALUE="$e_M/$e_N"
e_STATUS="STAT1"
fi
fi
fi
esac
######## Output ########
# TODO: more detailed output - if user wants to see details
# For prompt
STATUS="${I}_STATUS";STATUS="${!STATUS}"
COLOR="C_$STATUS";COLOR="${!COLOR}"
[[ "$STATUS" != "NONE" ]] && RESULT="${RESULT}${COLOR}${VALUE}${C_RESET}"
done
[[ -n "$RESULT" ]] && RESULT="[${RESULT}]"
PS1="[]\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]> "
PS1="${PS1/[]/${RESULT}}"
}
PROMPT_COMMAND="_SystemStatus"