Buenas tardes,
Es posible en un bash script poder tener dos areas distintas de impresión. Os pongo en contexto para poder explicarme un poco mejor.
Quiero realizar un proceso automático, este proceso esta controlado por un barra de progreso, mostrar la barra de progreso lo tengo mediante esta función
function progreso()
{
percent=`awk 'BEGIN{printf("%0.2f", '$1' / '$2' * 100)}'`
MESSAGE="Progreso de ficheros $EXT: $percent %: "
let COLUMNA=$(tput cols)-$(echo $MESSAGE | wc -m)-2
echo -en "\r";
echo -en "$MESSAGE"
let barra=$1*$COLUMNA; let barra=$barra/$2;let barra2=$COLUMNA-$barra;
if [ $barra -eq $COLUMNA ];then
for j in `seq 1 $barra`;do
echo -en "\033[44m ";
done
else
for j in `seq 1 $barra`;do
echo -en "\033[41m ";
done
for k in `seq 1 $barra2`;do
echo -en "\033[47m ";
done
fi
echo -en "||\033[40m"
}
Ahora bien como podéis ver la idea es que la linea en la que estoy imprimiendo la barra se mantenga constantemente, pero ahora me gustaría mostrar el log del script a la vez abajo como si fuera otro area distinta, (P.E.: El boot de arranque de RHE).
¿Sería posible desde bash realizar esto?
Un script completo con la barra de estado.
#!/bin/bash
# description: Ejemplo Barra de progreso
sh_processname="$0"
sh_author="rcarrera"
sh_version="0.1"
sh_date="05/02/2013"
###Variables
MAX=10
##Funciones
function progreso()
{
percent=`awk 'BEGIN{printf("%0.2f", '$1' / '$2' * 100)}'`
MESSAGE="Progreso de ficheros $EXT: $percent %: "
let COLUMNA=$(tput cols)-$(echo $MESSAGE | wc -m)-2
echo -en "\r";
echo -en "$MESSAGE"
let barra=$1*$COLUMNA; let barra=$barra/$2;let barra2=$COLUMNA-$barra;
if [ $barra -eq $COLUMNA ];then
for j in `seq 1 $barra`;do
echo -en "\033[44m ";
done
else
for j in `seq 1 $barra`;do
echo -en "\033[41m ";
done
for k in `seq 1 $barra2`;do
echo -en "\033[47m ";
done
fi
echo -en "||\033[40m"
}
##Cuerpo
for i in `seq 1 $MAX`;do
progreso $i $MAX
sleep 1
done
echo -e "\nHa terminado"
exit 0