GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Shell-Skript, nach dem Echo einer Nachricht in derselben Zeile lesen

echo -n "Enter [y/n] : " ; read opt

ODER! (Später ist besser)

read -p "[y/n]: " opt

Der Shebang #!/bin/sh bedeutet, dass Sie Code entweder für die historische Bourne-Shell schreiben (immer noch auf einigen Systemen wie Solaris zu finden, glaube ich) oder, was wahrscheinlicher ist, für die Standard-Shell-Sprache, wie sie von POSIX definiert wird. Das bedeutet, dass read -p und echo -n sind beide unzuverlässig.

Die Standard-/tragbare Lösung ist:

printf 'Enter [y/n] : '
read -r opt

(Die -r verhindert die Sonderbehandlung von \ , seit read akzeptiert das normalerweise als Zeilenfortsetzung, wenn es am Ende einer Zeile steht.)

Wenn Sie wissen, dass Ihr Skript auf Systemen mit Bash ausgeführt wird, können Sie den Shebang auf #!/bin/bash ändern (oder #!/usr/bin/env bash ) und nutzen Sie alle ausgefallenen Bash-Funktionen. (Viele Systeme haben /bin/sh Symlink zu bash es funktioniert also so oder so, aber sich darauf zu verlassen, ist schlechte Praxis und bash tatsächlich einige seiner eigenen Funktionen deaktiviert, wenn es unter dem Namen sh ausgeführt wird .)


Lösung:read -p "Enter [y/n] : " opt

Ab help read :

  -p prompt output the string PROMPT without a trailing newline before
        attempting to read

Linux
  1. Welcher Shell-Interpreter führt ein Skript ohne Shebang aus?

  2. Befehlszeilenargumente an Bash-Skript übergeben?

  3. Ist es Shell Portable, einen Befehl in derselben Zeile nach der Variablenzuweisung auszuführen?

  4. Wie überprüfe ich die Teilzeichenfolge in Shell Script Bash?

  5. Wie liest man das gesamte Shell-Skript, bevor man es ausführt?

So lesen Sie Dateien Zeile für Zeile in Bash

So lesen Sie eine Datei Zeile für Zeile in Bash

Bash-Zeilenfortsetzungen nach &&und || Dokumentiert?

Echotext nach Curl-Befehl in derselben Zeile?

So echoen Sie eine neue Zeile in Bash-Shell-Skripten

Wie liest man Befehlszeilenargumente in Shell-Skripten?