2016-06-16 10 views
1

Wie kann ich die Eingabe von einem Shell-Skript, das mit einer Pipe aufgerufen wird, ohne das Risiko der Katze warten auf Eingabe für immer fangen?Shell: Catch Benutzereingaben mit Katze

echo "hello world" | mysript.sh 

Im Skript versuche ich mit dem Eingang zu holen:

input=$(cat) 

Aber in einigen Fällen cat Befehl das gesamte Skript Timeout verursacht, weil es für die Eingabe wartet.

+1

Sie möchten die Eingabe abfangen, aber nicht auf Eingaben warten? –

+2

Der Eingang muss mit EOF = Strg + D enden. –

+0

Verwenden Sie stattdessen 'read' in Ihrem Skript. Sie können Zeile für Zeile lesen, und Ihre Shell unterstützt möglicherweise zusätzliche Tools wie Timeouts und Einzelzeichen-Lesevorgänge. – ghoti

Antwort

0

Angenommen, Sie Daten aus dem Rohr in Shell-Skript verarbeiten wollen, versuchen Sie:

In Skript:

read LINE 
echo $LINE 

In Befehlszeile:

echo "hello world" | ./mysript.sh 

In diesem Fall wird hello world sein lesen Sie in LINE.

+0

Versuchen Sie das mit allem, das ein Globbing-Muster enthält, zum Beispiel ''/etc/* ''(d. H. Doppelzitat' $ LINE'). – Kusalananda