Discussion:
bash & read mit Vorbelegung: Curorposition
(zu alt für eine Antwort)
Bernd
2020-12-17 14:06:37 UTC
Permalink
Hi,

-----------
#!/bin/bash
read -e -p "Ja oder Nein (j/N)" -i "N" ANSWER
echo "Antwort ${ANSWER}"
-----------

Das zeigt nach dem Start:

Ja oder Nein (j/N)N_

Der Unterstrich soll dabei der Cursor sein. Der Cursor steht am Ende der
Zeile. (Wie) Ist es möglich den Cursor auf(!) das letzte N zu stellen,
so das die Eingabe von J das N überschreibt?

Mit dem Parameter -e wird lt. man die readline Library verwendet die den
Cursor mittels Crtl-b einen Stelle nach links setzt. Aber wie bekomme
ich das in den Aufruf von read?

Bernd
Michael Schütz
2020-12-17 18:56:42 UTC
Permalink
Hallo,
Post by Bernd
Hi,
-----------
#!/bin/bash
read -e -p "Ja oder Nein (j/N)" -i "N" ANSWER
echo "Antwort ${ANSWER}"
-----------
Ja oder Nein (j/N)N_
Der Unterstrich soll dabei der Cursor sein. Der Cursor steht am Ende der
Zeile. (Wie) Ist es möglich den Cursor auf(!) das letzte N zu stellen,
so das die Eingabe von J das N überschreibt?
Versuche es doch so:

read -e -p "Ja oder Nein (j/N): " INPUT
ANSWER=${INPUT:-n}
echo "Antwort: $ANSWER"
Post by Bernd
Bernd
Schultze
--
Weil Denken die schwerste Arbeit ist, die es gibt, beschäftigen sich
auch nur wenige damit.
Henry Ford
Michael Schütz
2020-12-17 19:00:16 UTC
Permalink
Post by Michael Schütz
read -e -p "Ja oder Nein (j/N): " INPUT
ANSWER=${INPUT:-n}
echo "Antwort: $ANSWER"
Oder besser so:
read -e -p "Ja oder Nein (j/N): " ANSWER; ANSWER=${ANSWER:-n};echo $ANSWER
--
Die USA versuchen im Irak die Demokratie zu etablieren.
Wenn es gelingt, dann wollen sie es bei sich auch ausprobieren.
Friedhelm Waitzmann
2020-12-18 00:08:54 UTC
Permalink
Post by Bernd
Hi,
-----------
#!/bin/bash
read -e -p "Ja oder Nein (j/N)" -i "N" ANSWER
echo "Antwort ${ANSWER}"
-----------
Ja oder Nein (j/N)N_
Der Unterstrich soll dabei der Cursor sein. Der Cursor steht am Ende der
Zeile. (Wie) Ist es möglich den Cursor auf(!) das letzte N zu stellen,
so das die Eingabe von J das N überschreibt?
So einfach ist das nicht: Mit der Cursorpositionierung ist es
nicht getan. Selbst dann, wenn das gelingt, den Cursor
anfänglich auf das N zu stellen (kann man das in der
Readline‐Konfiguration?), befindet sich, wenn Du nicht weitere
Maßnahmen ergreifst, die Eingabe am Anfang im Einfügemodus. Wenn
Du dann ein J eingibst, wird das vor dem N eingefügt, und das N
verschwindet nicht.

Eventuell helfen die Manual‐Seiten bash(1) und readline(3)
weiter.


Friedhelm
Bernd
2020-12-18 07:30:24 UTC
Permalink
Post by Bernd
Hi,
-----------
#!/bin/bash
read -e -p "Ja oder Nein (j/N)" -i "N" ANSWER
echo "Antwort ${ANSWER}"
-----------
Ja oder Nein (j/N)N_
Der Unterstrich soll dabei der Cursor sein. Der Cursor steht am Ende der
Zeile. (Wie) Ist es möglich den Cursor auf(!) das letzte N zu stellen,
so das die Eingabe von J das N überschreibt?
Mit dem Parameter -e wird lt. man die readline Library verwendet die den
Cursor mittels Crtl-b einen Stelle nach links setzt. Aber wie bekomme
ich das in den Aufruf von read?
Bernd
Habt Dank!

Den Umweg über das nachträgliche Bearbeiten der Eingabe werde ich wohl
gehen müssen. Eine ähnliche Zeile hatte ich gebaut. Aber Michaels ist
eleganter :-)

Und Friedhelm hat natürlich recht, nur den Cursor versetzen hilft nicht
ausreichend ...

Ich wusste das es gut ist hier zu fragen :-)

Nochmal Danke ... und bleibt negativ!

Bernd
Michael Schütz
2020-12-18 15:43:56 UTC
Permalink
Post by Bernd
Den Umweg über das nachträgliche Bearbeiten der Eingabe werde ich wohl
gehen müssen. Eine ähnliche Zeile hatte ich gebaut. Aber Michaels ist
eleganter :-)
Danke. ;-)
Ich habe aber noch eine kleine Abkürzung gefunden:

read -e -p "Ja oder Nein (j/N): " ANSWER; : =${ANSWER:=n};echo $ANSWER
Post by Bernd
Ich wusste das es gut ist hier zu fragen :-)
Nochmal Danke ... und bleibt negativ!
Schön, dass ich helfen konnte.
Post by Bernd
Bernd
Schultze
--
Paradies ist da, wo einer aufpasst, dass keine Deppen reinkommen.
Erzengel Michael in "Die Geschichte vom Brandner Kaspar"
Bernd
2020-12-19 13:12:13 UTC
Permalink
Post by Michael Schütz
read -e -p "Ja oder Nein (j/N): " ANSWER; : =${ANSWER:=n};echo $ANSWER
Jetzt musste ich doch erst mal man bash lesen ...

Interessantes Kommando :

Damit bekommt man OneLiner sicher so unlesbar wie in Perl ;-)

Schönes Wochenende!

Bernd

Loading...