Das mag ziemlich seltsam klingen, aber ich weiß, wie man die vertikale Cursorposition in Bash wie folgt einstellt:
echo -e "\e[12H"
Dies bewegt den Cursor in die 12. Zeile (beginnend mit 1).
Wie erhalte ich die Cursorposition (Zeilennummer) mit Linux Bash? Es wäre hilfreich, wenn ich diesen Wert einfach in einer Variablen speichern könnte, damit ich damit rechnen kann.
BEARBEITEN:
Dies ist der Fehler, den ich bekomme:
$ sh rowcol.sh
-en
read: 9: Illegal option -d
test.sh: 12: Bad substitution
Antworten:
Ich konnte einige Beispiele aus demselben Artikel über SO mit dem Titel verwenden: Wie erhalte ich die Cursorposition in Bash? . Ich poste dies hier nur, um zu zeigen, dass sie funktionieren und dass der Inhalt von Lösungen tatsächlich auch auf U & L ist.
Bash-Lösungen
Aus einem Skript heraus
HINWEIS: Ich habe die Ausgabe leicht verändert!
Beispiel
Interaktive Shell
Diese Befehlskette diente zum Abrufen der Zeilen- und Spaltenpositionen des Cursors:
Beispiel
HINWEIS: Diese Methode scheint von keinem Skripttyp aus verwendbar zu sein. Selbst einfache Befehle in einem interaktiven Terminal haben bei mir nicht funktioniert. Beispielsweise:
hängt nur auf unbestimmte Zeit.
Dash / Sh-Lösungen
Aus einem Skript heraus
Diese Lösung ist für Ubuntu / Debian-Systeme vorgesehen, die auf Lager
dash
sind und POSIX-kompatibel sind. Aus diesem Grund unterstützt derread
Befehl den-d
Schalter unter anderem nicht.Um dies zu umgehen, gibt es diese Lösung,
sleep 1
bei der anstelle des-d
Schalters ein verwendet wird. Dies ist nicht ideal, bietet aber zumindest eine funktionierende Lösung.Beispiel
Interaktive Shell
Ich konnte keine praktikable Lösung finden, die nur
sh
in einer interaktiven Shell funktioniert .quelle
sh rowcol.sh
. Es spielt keine Rolle, was Sie in die erste Zeile (#!/bin/bash
oder#!/bin/sh
) setzen oder welches Ende die Datei hat!sh
ist nur ein Kompatibilitätsmodus vonbash
. Wenn ich das mache (sh rowcol.bash
) funktioniert es, funktioniert es dann nicht für dich?alias sh=bash
?Die Verwendung der
-p
Option anstelle vonecho
Ich fand das Problem mit dem Hängen in einem Skript gelöst. Getestet mitGNU bash, version 3.00.16(1)-release (x86_64-redhat-linux-gnu)
.arbeitet interaktiv oder in einem Skript:
Ausgänge:
quelle
Sie können die Cursorposition über
ANSI CSI DSR
(Gerätestatusbericht) abrufen :\e[6n
. Beachten Sie, dass es in einem ähnlichen Format wieANSI CSR CUP
(Cursorposition) zurückgegeben wird, das Sie in Ihrer Frage erwähnt haben, jedoch dem Formular folgt\e[n;mR
(wobei n die Zeile und m die Spalte ist).Weitere Details zu ANSI-Escape-Codes finden Sie auf Wikipedia .
Um den Wert in eine Variable zu bekommen, wurde dies auf StackOverflow beantwortet .
Wie in einer vorherigen Antwort / einem Kommentar erwähnt (und im Wikipedia-Artikel ausführlich beschrieben), sind diese Codes nicht immer portabel (von Terminal zu Terminal und von Betriebssystem zu Betriebssystem). Ich denke immer noch, dass dies mit Termcap / Flüchen besser gehandhabt wird;)
quelle
echo -e
,echo -en
undread ...
. Dies geschieht nur, wenn der Code in der Datei vorhanden ist! Ich verstehe das nicht wirklich!echo -e
hat vorher funktioniert, aber jetzt nicht! Was könnte dies verursacht haben und wie kann ich es wiederherstellen?Mit POSIX-
sh
Syntax:quelle