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