Esto puede sonar bastante extraño, pero sé cómo configurar la posición del cursor vertical en Bash de esta manera:
echo -e "\e[12H"
Esto mueve el cursor a la línea 12 (comenzando con 1).
Entonces, ¿cómo obtengo la posición del cursor (número de línea) usando linux bash? Sería útil si pudiera simplemente almacenar este valor en una variable para poder calcular con él.
EDITAR:
Este es el error que obtengo:
$ sh rowcol.sh
-en
read: 9: Illegal option -d
test.sh: 12: Bad substitution
Respuestas:
Pude usar algunos de los ejemplos del mismo artículo sobre SO, titulado: ¿Cómo obtener la posición del cursor en bash? . Estoy publicando esto aquí solo para mostrar que funcionan y que el contenido de las soluciones también está en U&L.
Soluciones bash
Desde dentro de un guión
NOTA: ¡Cambié un poco la salida!
Ejemplo
Shell interactivo
Esta cadena de comandos funcionó para obtener las posiciones de fila y columna del cursor:
Ejemplo
NOTA: este método no parece ser utilizable desde ningún tipo de secuencia de comandos. Incluso los comandos simples en un terminal interactivo no funcionaron para mí. Por ejemplo:
solo cuelga indefinidamente.
soluciones dash / sh
Desde dentro de un guión
Esta solución es para sistemas Ubuntu / Debian que vienen en stock
dash
, que es compatible con POSIX. Debido a esto, elread
comando no admite el-d
cambio entre otras diferencias.Para evitar esto, existe esta solución que utiliza un
sleep 1
en lugar del-d
interruptor. Esto no es ideal, pero ofrece al menos una solución de trabajo.Ejemplo
Shell interactivo
No pude encontrar una solución viable que funcionara solo
sh
en un shell interactivo.fuente
sh rowcol.sh
. ¡No importa lo que pones en la primera línea (#!/bin/bash
o#!/bin/sh
) o qué final tiene el archivo!sh
es solo un modo de compatibilidadbash
. Cuando hago eso (sh rowcol.bash
) funciona, ¿no te funciona entonces?alias sh=bash
?Usando la
-p
opción en lugar deecho
encontré resuelto el problema de colgar en un script. Probado conGNU bash, version 3.00.16(1)-release (x86_64-redhat-linux-gnu)
.funciona de forma interactiva o en un script:
Salidas:
fuente
Se puede llegar a través de la posición del cursor
ANSI CSI DSR
(Device Status Report):\e[6n
. Tenga en cuenta que lo devuelve en un formato similar aANSI CSR CUP
(Posición del cursor) que menciona en su pregunta, sin embargo, sigue la forma\e[n;mR
(donde n es la fila ym la columna).Más detalles de los códigos de escape ANSI en wikipedia .
Para obtener el valor en una variable, esto se respondió en StackOverflow .
Como se mencionó en una respuesta / comentario anterior (y se detalla en el artículo de Wikipedia), estos códigos no siempre son portátiles (de terminal a terminal y de OS a OS). Todavía creo que esto se maneja mejor con termcap / curses;)
fuente
echo -e
,echo -en
yread ...
. ¡Esto solo sucede cuando el código está presente en el archivo! Realmente no entiendo esto!echo -e
trabajó antes pero ahora no! ¿Qué pudo haber causado esto y cómo lo restauro?Con
sh
sintaxis POSIX :fuente