Ich habe die Lösung gefunden.
Sie müssen folgendes hinzufügen:
MY_TTY=$(ps -ef | grep -m 1 $$ | awk '') read OWNER </dev/$
Zunächst einmal vielen Dank für Ihre Hilfe im Voraus und für den Fall, dass dies zuvor beantwortet wurde. Ich konnte es nicht finden.
Um zu helfen, meine Frage zu verstehen, habe ich das folgende einfache Skript namens "list_server_owners" geschrieben (es ist nutzlos, aber es ist nur ein Beispiel):
#!/bin/bash SERVER_LIST="" SERVER_LIST="$(cat) " # This reads from stdin for SERVER in $SERVER_LIST do echo -n "Please, write the server's owner: " read OWNER echo "$'s owner is $OWNER" done
Ich habe die folgende Textdatei mit dem Namen "server_list":
Server1 Server2
Und das ist die Ausgabe des Skripts, das "server_list" durch stdin weitergibt:
$ cat server_list | list_server_owner Please, write the server's owner: Server1's owner is Please, write the server's owner: Server2's owner is
Das Problem ist einfach zu beschreiben: Die Zeile des Skripts "read OWNER" funktioniert nicht so, wie ich es gerne hätte. Der Name des Servers des Servers wird nicht auf dem Bildschirm angefordert.
Wissen Sie, wie ich mit dem Befehl "Lesen" eine Zeichenfolge auf dem Bildschirm anfordern kann?
Ich habe die Lösung gefunden.
Sie müssen folgendes hinzufügen:
MY_TTY=$(ps -ef | grep -m 1 $$ | awk '') read OWNER </dev/$
Die Datei / dev / tty ist ein Synonym für das steuernde Terminal des Prozesses. Umleiten Sie einfach die Eingabe von diesem Gerät:
... read OWNER </dev/tty ...
Sie können auch die Ausgabe der Echoaufforderung vor / dev / tty umleiten und dann das Skript in einer Pipe verwenden:
#!/bin/bash while read SERVER # this reads from stdin do echo -n "Please, write the server's owner: " >/dev/tty read OWNER </dev/tty echo "$SERVER:$OWNER" # write to stdout done
Und verwenden wie:
cat server_list | assign_owner > server_owner
Eine andere Möglichkeit, und es ist für mich die einfachste:
exec 0</dev/tty read OWNER
Damit müssen Sie nicht die Standardeingabe für alle "read" -Befehle im Skript angeben.
Ich war verwirrt, weil, wenn Sie den Befehl "tty" in das Skript schreiben, keine Ausgabe erfolgt, aber wie im letzten Kommentar (Danke) angegeben, wird die spezielle Datei / dev / tty erkannt.