Salah satu pendekatan potensial adalah dengan meletakkan while...read
konstruk di dalam fungsi Anda yang akan memproses data apa pun yang masuk ke fungsi melalui STDIN, beroperasi di atasnya, dan kemudian memancarkan kembali data yang dihasilkan melalui STDOUT.
function X {
while read data; do
...process...
done
}
Perawatan harus dihabiskan dengan cara Anda mengkonfigurasi while ..read..
komponen Anda karena mereka akan sangat bergantung pada jenis data yang mereka dapat konsumsi dengan andal. Mungkin ada konfigurasi optimal yang bisa Anda buat.
Contoh
$ logF() { while read data; do echo "[F:$(date +"%D %T")] $data"; done; }
$ logG() { while read data; do echo "G:$data"; done; }
$ logH() { while read data; do echo "H:$data"; done; }
Inilah masing-masing fungsi dengan sendirinya.
$ echo "hi" | logF
[F:02/07/14 20:01:11] hi
$ echo "hi" | logG
G:hi
$ echo "hi" | logH
H:hi
Inilah mereka ketika kita menggunakannya bersama.
$ echo "hi" | logF | logG | logH
H:G:[F:02/07/14 19:58:18] hi
$ echo -e "hi\nbye" | logF | logG | logH
H:G:[F:02/07/14 19:58:22] hi
H:G:[F:02/07/14 19:58:22] bye
Mereka dapat mengambil berbagai gaya input.
#-- ex. #1
$ cat <<<"some string of nonsense" | logF | logG | logH
H:G:[F:02/07/14 20:03:47] some string of nonsense
#-- ex. #2
$ (logF | logG | logH) <<<"Here comes another string."
H:G:[F:02/07/14 20:04:46] Here comes another string.
#-- ex. #3
$ (logF | logG | logH)
Look I can even
H:G:[F:02/07/14 20:05:19] Look I can even
type to it
H:G:[F:02/07/14 20:05:23] type to it
live
H:G:[F:02/07/14 20:05:25] live
via STDIN
H:G:[F:02/07/14 20:05:29] via STDIN
..type Ctrl + D to stop..
#-- ex. #4
$ seq 5 | logF | logG | logH
H:G:[F:02/07/14 20:07:40] 1
H:G:[F:02/07/14 20:07:40] 2
H:G:[F:02/07/14 20:07:40] 3
H:G:[F:02/07/14 20:07:40] 4
H:G:[F:02/07/14 20:07:40] 5
#-- ex. #5
$ (logF | logG | logH) < <(seq 2)
H:G:[F:02/07/14 20:15:17] 1
H:G:[F:02/07/14 20:15:17] 2
h(g(f(...)))
atau masing-masing fungsi membaca dari input standar (read x; ...
) dan menulis ke output standar (echo ...
).