Isso pode parecer muito estranho, mas eu sei como definir a posição vertical do cursor no Bash assim:
echo -e "\e[12H"
Isso move o cursor para a 12ª linha (começando com 1).
Então, como obtenho a posição do cursor (número da linha) usando o linux bash? Seria útil se eu pudesse simplesmente armazenar esse valor em uma variável para poder calcular com ele.
EDITAR:
Este é o erro que recebo:
$ sh rowcol.sh
-en
read: 9: Illegal option -d
test.sh: 12: Bad substitution
Respostas:
Consegui usar alguns dos exemplos do mesmo artigo no SO, intitulado: Como obter a posição do cursor no bash? . Estou postando isso aqui apenas para mostrar que eles funcionam e que o conteúdo das soluções também está na U&L.
Soluções Bash
De dentro de um script
NOTA: Alterei ligeiramente a saída!
Exemplo
Shell interativo
Essa cadeia de comando trabalhou para obter as posições de linha e coluna do cursor:
Exemplo
NOTA: Este método não parece ser utilizável em nenhum tipo de script. Mesmo comandos simples em um terminal interativo não funcionaram para mim. Por exemplo:
apenas trava indefinidamente.
soluções dash / sh
De dentro de um script
Esta solução é para sistemas Ubuntu / Debian que são fornecidos com estoque
dash
, compatível com POSIX. Por esse motivo, oread
comando não suporta a-d
alternância entre outras diferenças.Para contornar isso, existe esta solução que usa um
sleep 1
no lugar do-d
comutador. Isso não é o ideal, mas oferece pelo menos uma solução funcional.Exemplo
Shell interativo
Não consegui encontrar uma solução viável que funcionasse apenas
sh
em um shell interativo.fonte
sh rowcol.sh
. Não importa o que você coloca na primeira linha (#!/bin/bash
ou#!/bin/sh
) ou o final do arquivo!sh
é apenas um modo de compatibilidade debash
. Quando eu faço isso (sh rowcol.bash
), funciona, então não funciona para você?alias sh=bash
?Usando a
-p
opção em vez deecho
eu encontrei resolveu o problema de suspensão em um script. Testado comGNU bash, version 3.00.16(1)-release (x86_64-redhat-linux-gnu)
.trabalha interativamente ou em um script:
Saídas:
fonte
Você pode obter a posição do cursor via
ANSI CSI DSR
(Dispositivo Status Report):\e[6n
. Observe que ele o retorna em um formato semelhante aANSI CSR CUP
(Posição do Cursor) que você mencionou na sua pergunta, no entanto, segue o formulário\e[n;mR
(onde n é a linha e a coluna).Mais detalhes dos códigos de escape ANSI na wikipedia .
Para se apossar do valor em uma variável, isso foi respondido no StackOverflow .
Conforme mencionado em uma resposta / comentário anterior (e detalhado no artigo da wikipedia), esses códigos nem sempre são portáteis (do terminal ao terminal e do SO ao SO). Eu ainda acho que isso é melhor tratado com termcap / maldições;)
fonte
echo -e
,echo -en
eread ...
. Isso só acontece quando o código está presente no arquivo! Eu realmente não entendo isso!echo -e
trabalhou antes, mas agora não! O que pode ter causado isso e como faço para restaurá-lo?Com
sh
sintaxe POSIX :fonte