Frage

Was Shell druckt?

echo foo | while read line; do echo $line; done < <(echo bar)

Ich würde erwarten, dass es echo foo | bar oder foo < <(bar), von denen beide führen würde zu einer Fehlermeldung zu bewerten.

In Bash 4.1.5 es sieht aus wie das Rohr einfach verworfen wird:

bar

In Dash:

sh: Syntax error: redirection unexpected
War es hilfreich?

Lösung

Dash nicht Prozess Substitution unterstützen (<()).

Das Verhalten Sie sehen, ist konsistent, wenn Sie Syntax verwenden, die von jeder der Schalen unterstützt wird Sie vergleichen. Versuchen Sie folgendes:

echo hello | cat < inputfile

Sie sollten den Inhalt von „Eingabedatei“ und nicht „Hallo“ sehen. Von mehreren Schalen habe ich versucht, nur zeigte Z-Shell beide.

Dies ist, was POSIX sagt über Pipelines und Umleitung:

  

Die Standardausgabe von command1 wird die Standardeingabe von command2 angeschlossen werden. Die Standardeingabe, Standardausgabe, oder beide von einem Befehl wird vor jeder Umleitung durch Umleitung Operatoren spezifiziert durch die Pipeline zugewiesen werden in Betracht gezogen werden, die Teil des Befehls (siehe Redirection) sind.

ich das interpretieren, dass im Fall des Beispiels bedeuten oben, stdin die Pipeline ordnet sie dann die Umleitung Überschreibungen cat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top