Nota:
unlike the wrongly copied and continually upvoted answer provided
(points scoring?), the following script IS NON-BLOCKING, and does
not care what length returned input may be. IE it will work with
ANY screen size.
Com o SH, ele é mais complexo e não consegui encontrar a versão de linha de comando aprimorada do read
incorporado; eventualmente, encontrei uma menção de dd
no STDIN; aqui está o resultado. OBSERVE que a versão SH do echo
integrado não permite o uso echo -en
, embora /bin/echo -en
funcione, usamos printf
.
#!/bin/sh
x_TERM='stty -g'
stty -icanon -echo
printf "3[6n"
ESCPOS=""
X=""
I=0
while [ ! "$X" = "R" ]; do
X='dd bs=1 count=1 2>/dev/null'
I='expr $I + 1'
if [ $I -gt 2 -a ! "$X" = "R" ]; then
ESCPOS="$ESCPOS$X"
fi
done
stty "$x_TERM"
#echo "$ESCPOS"
CSRLIN='echo "$ESCPOS" | cut -d \; -s -f 1'
POS='echo "$ESCPOS" | cut -d \; -s -f 2'
echo "$CSRLIN"
#exit 0 <= dont use inline
Eu usei o mesmo código em dois scripts diferentes, um gera CSRLIN
, o outro POS
.
EDITAR: você precisa embutir este script para usá-lo em outro script (por exemplo, . CSRLIN
, já que o shell deve estar no modo interativo.
Felicidades
Paul