den folgenden einfachen interaktiven Shell-Skript:Rohr stdout einen interaktiven Skript seine eigenen stdin
# tool.sh
echo "Good Morning."
echo "My Name is Mr. Sunshine, I am 100 years old."
echo
echo "So, what's your name?"
read name;
echo "and, whats' your age?"
read age;
echo $name, $age years old > output.txt
Sag mal, dieses Skript jetzt durch ein anderes Skript programmatisch ausgeführt werden soll. Es ist so einfach wie folgt:
echo -e "Anton\n28" | bash tools.sh
und voilà, output.txt enthält "Anton, 28 Jahre alt" jetzt.
Der schwierige Teil kommt jetzt: Ich möchte "Mr. Sunshine, 100 Jahre alt" in der output.txt sehen, mit nur dem Öffnen des Werkzeugs einmal.
Das Problem hier ist die Einstellung eines Rohres, das die Ausgabe der Werkzeuge analysiert und Teile direkt an seinen Eingang sendet.
sed -nr 's/^My Name is (.*), I am (.*) years old\.$/\1\t\2/p'
Ich verstehe nicht ganz, was Sie wollen. * Ich möchte "Mr. Sunshine, 100 Jahre alt" in der output.txt sehen, indem ich das Tool nur einmal öffne. * 'Echo -e" Mr. Sunshine \ n100 "| bash tools.sh' öffnet "tools.sh" nur einmal und das gewünschte Ergebnis wird in "output.txt" geschrieben. Ihre 'sed'-Zeile sieht so aus, als ob Sie' output.txt' lesen und sie Ihrem Skript zuführen möchten. Ist das was du willst? – mhoff
Die Code-Zeile, die Sie vorschlagen, würde das Ding tun, aber in dem Szenario würden Sie jetzt nicht die Werte "Mr. Sonnenschein 'und' 100 'vorher. Mit der sed line will ich nicht output.txt parsen sondern die Ausgabe der ersten Zeilen von tool.sh –
Danke für die Klarstellung. Das ist eine sehr interessante Frage. – mhoff