Bei einem .sh-Skript auf eine Eingabe warten und dazu Backspace erlauben [Gelöst]
- martij
- Beiträge: 63
- Registriert: 03.09.2018 11:48:37
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: CH
-
Kontaktdaten:
Bei einem .sh-Skript auf eine Eingabe warten und dazu Backspace erlauben [Gelöst]
Hallo zusammen
Warum fügt backspace ein Zeichen ein, statt eines zu löschen?
Weiss das jemand? Falls ja wäre ich für nen Tipp sehr dankbar!
Warum fügt backspace ein Zeichen ein, statt eines zu löschen?
Weiss das jemand? Falls ja wäre ich für nen Tipp sehr dankbar!
Zuletzt geändert von martij am 16.03.2021 12:12:33, insgesamt 3-mal geändert.
Grüsse, Martin
Re: Bei einem .sh-Skript auf ne Eingabe waren und datz Backspace erlauben
Wenn du die zwei Vertipper im Titel korrigierst und ein bisschen mehr Infos lieferst, dann erhoeht das die Wahrscheinlichkeit fuer hilfreiche Antworten. Oder erwartest du, dass sich die Antwortenden bei einem fremden Problem Muehe geben und Zeit investieren, wenn du das noch nicht mal bei deinem eigenen Problem fuer noetig haeltst?
Use ed once in a while!
Re: Bei einem .sh-Skript auf eine Eingabe waren und dazu Backspace erlauben
Gut.
Welchen read-Befehl meinst du? Den:
Code: Alles auswählen
read -p "Please enter SFTP server: " -i server.tld -e REMOTE_SERVER
Terminal-Settings nicht in Ordnung? `stty sane' ausprobiert? Falscher Wert in $TERM?
Du musst uns mehr Infos ueber dein Setup liefern und an welcher Stelle das Problem genau auftritt. Extrahiere die eine Zeile im Code. Teste sie separat. Tritt das Problem dann auch auf? Teste sie wenn moeglich auf einem anderen System. Ist es da auch so? Und: Welches Zeichen wird denn eingefuegt, wenn du Backspace drueckst?
... alternativ koenntest du auch bei feltel unseren Antrag fuer Kristallkugeln fuer die Mods nochmal unterstuetzen. Vielleicht wird das dann ja endlich mal was.
Use ed once in a while!
Re: Bei einem .sh-Skript auf eine Eingabe waren und dazu Backspace erlauben
Da hat Meillo wohl recht, sehr wenige Infos... Aber ich denke es geht um diese Zeilen hier:
Hab mal was "Gebastelt". Ist nicht perfekt aber vlt. ein Ausgangspunkt:
Der Code ist kaum getestet und hat Probleme, wenn man alle Zeichen wieder loescht / wenn REMOTE_PASSWORD leer ist...
Gruss,
heinz
P.S.
Es ist immer noch ein Vertipper im Titel...
Code: Alles auswählen
prompt="Please enter SFTP password: ";
while IFS= read -p "$prompt" -r -s -n 1 char
do
if [[ $char == $'\0' ]]; then
break;
fi;
prompt='*';
REMOTE_PASSWORD+="$char";
done;
Code: Alles auswählen
prompt="Please enter SFTP password: "
while read -p "$prompt" -r -s -n 1 char
do
test -z "$char" && break
if test "$(echo -n "$char"|hexdump -e '"%_c"')" == '177'
then
echo -ne '\e[2D \e[2D'
REMOTE_PASSWORD="${REMOTE_PASSWORD:0:$((${#REMOTE_PASSWORD}-1))}"
else
prompt='*'
REMOTE_PASSWORD+="$char"
fi
done
Gruss,
heinz
P.S.
Es ist immer noch ein Vertipper im Titel...
- martij
- Beiträge: 63
- Registriert: 03.09.2018 11:48:37
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: CH
-
Kontaktdaten:
Re: Bei einem .sh-Skript auf eine Eingabe warten und dazu Backspace erlauben
Vielen Dank!!
Grüsse, Martin
- martij
- Beiträge: 63
- Registriert: 03.09.2018 11:48:37
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: CH
-
Kontaktdaten:
Re: Bei einem .sh-Skript auf eine Eingabe warten und dazu Backspace erlauben
Ja, das letzte Zeichen darf man nicht löschen - sonst gibt's Problem mit Deinem Beispiel. Trotzdem danke.
Grüsse, Martin
- martij
- Beiträge: 63
- Registriert: 03.09.2018 11:48:37
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: CH
-
Kontaktdaten:
Re: Bei einem .sh-Skript auf eine Eingabe warten und dazu Backspace erlauben
Vielleicht wiess jemand wie man das Problem mit dem letzten Zeichen noch umgeht. Dann wär's perfekt...
Grüsse, Martin
Re: Bei einem .sh-Skript auf eine Eingabe warten und dazu Backspace erlauben
Nicht sehr schoen aber scheint zu "gehen"...
Gruss,
heinz
Code: Alles auswählen
echo -n "Please enter SFTP password: "
while read -rsn1 char
do
test -z "$char" && break
if test "$(echo -n "$char"|hexdump -e '"%_c"')" == '177'
then
if test ${#REMOTE_PASSWORD} -gt 0
then
echo -ne '\e[1D \e[1D'
REMOTE_PASSWORD="${REMOTE_PASSWORD:0:$((${#REMOTE_PASSWORD}-1))}"
fi
else
echo -n '*'
REMOTE_PASSWORD+="$char"
fi
done
heinz
- martij
- Beiträge: 63
- Registriert: 03.09.2018 11:48:37
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: CH
-
Kontaktdaten:
Re: Bei einem .sh-Skript auf eine Eingabe warten und dazu Backspace erlauben
Vielen Dank, Code muss mE. nicht "schön" sein. Nur einigermassen effizient ablaufen (ohne grosse Umwege) und funktionieren - and that's it.
Grüsse, Martin