Cela peut sembler assez étrange, mais je sais comment définir la position du curseur vertical dans Bash comme ceci:
echo -e "\e[12H"
Cela déplace le curseur sur la 12e ligne (en commençant par 1).
Alors, comment puis-je obtenir la position du curseur (numéro de ligne) en utilisant Linux bash? Il serait utile que je puisse simplement stocker cette valeur dans une variable afin de pouvoir calculer avec elle.
ÉDITER:
Voici l'erreur que j'obtiens:
$ sh rowcol.sh
-en
read: 9: Illegal option -d
test.sh: 12: Bad substitution
Réponses:
J'ai pu utiliser certains des exemples du même article sur SO, intitulé: Comment obtenir la position du curseur dans bash? . Je poste ceci ici juste pour montrer qu'ils fonctionnent et que le contenu des solutions est également sur U&L.
Bash solutions
De l'intérieur d'un script
REMARQUE: j'ai légèrement modifié la sortie!
Exemple
Coque interactive
Cette chaîne de commandes a fonctionné pour obtenir les positions de ligne et de colonne du curseur:
Exemple
REMARQUE: cette méthode ne semble pas utilisable à partir de n'importe quel type de script. Même les commandes simples dans un terminal interactif ne fonctionnaient pas pour moi. Par exemple:
se bloque juste indéfiniment.
solutions dash / sh
De l'intérieur d'un script
Cette solution est destinée aux systèmes Ubuntu / Debian fournis en stock
dash
, qui sont conformes à POSIX. Pour cette raison, laread
commande ne prend pas en charge le-d
commutateur parmi d'autres différences.Pour contourner cela, il existe cette solution qui utilise un
sleep 1
à la place du-d
commutateur. Ce n'est pas idéal mais offre au moins une solution de travail.Exemple
Coque interactive
Je n'ai pas pu trouver de solution réalisable fonctionnant uniquement
sh
dans un shell interactif.la source
sh rowcol.sh
. Peu importe ce que vous mettez dans la première ligne (#!/bin/bash
ou#!/bin/sh
) ou la fin du fichier!sh
c'est juste un mode de compatibilité debash
. Quand je fais ça (sh rowcol.bash
) ça marche, ça ne marche pas pour toi alors?alias sh=bash
?En utilisant l'
-p
option au lieu deecho
j'ai trouvé résolu le problème de suspension dans un script. Testé avecGNU bash, version 3.00.16(1)-release (x86_64-redhat-linux-gnu)
.fonctionne de manière interactive ou dans un script:
Les sorties:
la source
Vous pouvez obtenir la position du curseur via
ANSI CSI DSR
(Device Status Report):\e[6n
. Notez qu'il le renvoie dans un format similaire àANSI CSR CUP
(Position du curseur) que vous mentionnez dans votre question, mais il suit le formulaire\e[n;mR
(où n est la ligne et m la colonne).Plus de détails sur les codes d'échappement ANSI sur wikipedia .
Pour obtenir la valeur de la valeur dans une variable, cela a été répondu sur StackOverflow .
Comme mentionné dans une réponse / un commentaire précédent (et détaillé dans l'article de wikipedia), ces codes ne sont pas toujours portables (de terminal à terminal et d'OS à OS). Je pense toujours que c'est mieux géré avec termcap / curses;)
la source
echo -e
,echo -en
etread ...
. Cela ne se produit que lorsque le code est présent dans le fichier! Je ne comprends pas vraiment ça!echo -e
travaillé avant mais maintenant il ne fonctionne pas! Qu'est-ce qui a pu causer cela et comment le restaurer?Avec la
sh
syntaxe POSIX :la source