2016-08-04 59 views
-1

Ich möchte ein Shell-Skript (POSIX) wie folgt ausführen.Wie man ein Shell-Skript (/ bin/sh) mit der Option -s erstellt und die Eingabe innerhalb

#!/bin/sh 
# this is a.sh 
echo your age? 
read age 
echo "You are $age." 

Wenn dies/bin/sh über die Standardeingabe als

cat a.sh | /bin/sh -s 

dann ausgelöst wird, die Frage übersprungen.

Wie kann ich die Frage stellen?

+0

Gibt es einen Grund, warum Sie es auf diese Weise anstelle von '/ bin/sh a.sh' ausführen? Das Problem ist, dass 'a.sh' seine Standardeingabe vom Aufruf an'/bin/sh' erbt, dessen Standardeingabe 'a.sh' ist. '/ bin/sh' liest die erste und zweite Zeile, aber Ihre' read' Anweisung liest die dritte Zeile. Da für '/ bin/sh' keine Eingabe mehr vorhanden ist, wird sie beendet. – chepner

Antwort

2

Das Problem ist, dass /bin/sh das Skript liest, und Ihr Skript Eingabe liest, aus der gleichen Eingabedatei: das Rohr durch cat a.sh zugeführt.

Eine Lösung besteht darin, Ihr Skript zu ändern direkt aus dem Terminal, nicht Standard-Eingabe, obwohl das möglicherweise nicht genau das, was Sie wollen.

Die bessere Lösung ist, das Skript nicht aus der Standardeingabe zu lesen; übergeben Sie es einfach als Argument an /bin/sh.

/bin/sh a.sh 
-1

Versuchen Option -n

echo -n "your age?" 
read age 
echo "Your age $age"