Bash Scripting - lesen Sie einzelne Tastenfolge einschließlich Sondertasten eingeben und Leerzeichen

8

Ich bin mir nicht sicher, ob ich StackOverflow oder unix.stackexchange verwenden soll, aber ich habe ähnliche Fragen hier, also hier geht es .

Ich versuche, ein Skript zu erstellen, das von .bashrc aufgerufen wird, das es mir ermöglicht, eine von zwei Optionen auszuwählen, die auf einem einzelnen Tastendruck basieren. Das wäre normalerweise nicht schwer, aber ich möchte, dass die zwei Schlüssel, die den beiden Optionen entsprechen, Leerzeichen und Enter sind.

Folgendes habe ich bis jetzt:

%Vor%

Die folgende Ausgabe ist, was ich bekomme, wenn ich Enter, Leerzeichen, Rücktaste und x:

drücke %Vor%

Also geben sowohl enter als auch space ein leeres SELECT ein. Keine Möglichkeit, die beiden zu unterscheiden. Ich habe versucht, -d 'D' zu den Leseoptionen hinzuzufügen, aber das hat nicht geholfen. Vielleicht kann mir jemand in die richtige Richtung zeigen.

Die Bash-Version wäre 4.2 btw.

    
a.peganz 03.04.2014, 15:56
quelle

3 Antworten

3

Versuchen Sie, den Lesetrennzeichen auf einen leeren String zu setzen, und überprüfen Sie dann die eingebaute Variable $ REPLY:

%Vor%

Aus irgendeinem Grund konnte ich es nicht zur Arbeit bringen, indem ich eine Variable spezifizierte.

    
Cole Tierney 03.04.2014, 17:06
quelle
3
%Vor%     
Andrey 03.04.2014 16:46
quelle
2

Es gibt ein paar Dinge über read , die hier relevant sind:

  • Es liest eine einzelne Zeile
  • Die Zeile wird wie bei der Wortaufspaltung in Felder aufgeteilt

Da Sie ein Zeichen lesen, bedeutet dies, dass die Eingabe von Enter zu einer leeren Variablen führen würde.

Außerdem würde nach den Standardregeln für die Wortaufteilung die Eingabe von Space auch zu einer leeren Variablen führen. Die gute Nachricht ist, dass Sie mit diesem Teil umgehen können, indem Sie IFS setzen.

Ändern Sie Ihre read -Anweisung zu:

%Vor%

und erwarten eine Null-Zeichenfolge anstelle von $'\x0a' beim Eingeben von Enter .

    
devnull 03.04.2014 16:46
quelle