Die Ausführung eines Bash-Skripts, das „read“ verwendet, muss mit Strg+D beendet werden.

Die Ausführung eines Bash-Skripts, das „read“ verwendet, muss mit Strg+D beendet werden.

EnterIch muss ein Skript schreiben, das beim Drücken eine Zeile zu einer Textdatei hinzufügt .

Aber wenn Ctrl+ Dgedrückt wird, muss ich diese Schleife in der Bash verlassen.

touch texttest.txt
LINE="0"
while true; do
    read LINE;
    if [ "$LINE" == "^D" ]; then
            break
    else
            echo "$LINE" >> texttest.txt
    fi
done

Ich habe derzeit so etwas, kann aber nicht herausfinden, wie ich die While-Schleife verlasse, wenn Ctrl+ Dstatt gedrückt wird Enter.

Antwort1

Du denkst zu viel darüber nach. Alles was du brauchst ist Folgendes:

cat > texttest.txt

Cat liest von STDIN, wenn Sie ihm nichts anderes gesagt haben. Da es von STDIN liest, reagiert es auf das Steuerzeichen Ctrl+, Dohne dass Sie es angeben müssen. Und da Ctrl+ D das einzige ist, das den Unterprozess beendet cat, müssen Sie es nicht einmal in eine Schleife einbinden.

Antwort2

Folgendes würde genügen:

while read -r LINE ; do
  echo "$LINE" >> texttest.txt
done
  1. Sie müssen die Datei nicht zuerst anfassen
  2. LINESie müssen die Variable nicht initialisieren
  3. Ctrl+Dschließt stdin, was readzum Beenden mit einem Exit-Code ungleich null (false) führt

verwandte Informationen