Ja. Siehe dieses Dokument .
Der Shell- und Dienstprogrammdatenträger von POSIX.1-2017 beschreibt die Befehle und Dienstprogramme, die Anwendungsprogramme von POSIX-konformen Systemen angeboten werden.
Ab 2.9.2 Pipelines :
Eine Pipeline ist eine Folge von einem oder mehreren Befehlen, die durch den Steueroperator '|' getrennt werden.
Ab 2.9.5 Funktionsdefinitionsbefehl :
Eine Funktion ist ein benutzerdefinierter Name, der als einfacher Befehl verwendet wird. [...]
Das Format eines Funktionsdefinitionsbefehls lautet wie folgt:
fname ( ) compound-command [io-redirect ...]
Ab 2.9 Shell-Befehle :
Ein Befehl ist einer der folgenden:
- Einfacher Befehl [...]
- [...]
Trennt also |
die Befehle. Ein Befehl kann ein einfacher Befehl sein. Funktionsname wird als einfacher Befehl verwendet. Die Antwort auf Ihre Frage lautet: Ja, diese Syntax
some_command | some_function
wird von POSIX definiert.
Es ist ziemlich einfach auszuprobieren (getestet mit sh
von dash
Debian 9):
mygrep() { grep "$@"; } if ps | mygrep foo ; then echo "process foo is running" fi if ps | mygrep ps ; then echo "process ps is running" fi
( ps | mygrep foo
wird auch einen Prozess erkennen foobar
, falls vorhanden. Ich verstehe, dass dieses Problem außerhalb des Umfangs Ihrer Frage liegt und wir können es ignorieren.)
In diesem Beispiel mygrep
ist das trivial. Es gibt den Exit-Status des letzten (und einzigen) Befehls zurück. Beim Erstellen return
von Funktionen mit komplexerer Logik benötigen Sie möglicherweise ein spezielles Feature, um den gewünschten Beendigungsstatus zurückzugeben.
Beachten Sie auch, dass die Ausgabe von grep
nicht unterdrückt wird. In Pipes kann nicht nur eine Shell-Funktion verwendet werden, auch die Ausgabe kann umgeleitet werden. Beispiel:
if ps | mygrep ps >/dev/null ; then echo "process ps is running" fi