Bash 3 兼容代码

Bash 3 兼容代码

我有这个 bash 函数:

zmx () { 

 "$@" 2> >( while read line; do echo -e "r2g: $line"; done ) > \
     >( while read line; do echo -e "r2g: $line"; done )

}

它的作用是将“r2g:”附加到 stdout/stderr 的每一行。

你像这样使用它:

$ zmx echo "foo"

你会得到:

r2g: foo

它在 Bash4 中运行良好,但在 Mac 上运行时似乎与 Bash3 不同。

有谁知道如何将其转换为惯用的 Bash3?

答案1

在 bash 3.2.57 上工作

MacBook-Pro:~ em$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
Copyright (C) 2007 Free Software Foundation, Inc.

MacBook-Pro:~ em$ zmx() { "$@" 2> >(while read line;do echo -e "err: $line"; done ) > >(while read line; do echo -e "std: $line"; done); }
MacBook-Pro:~ em$ zmx bash -c "ls -1 /etc/ | head -5 ; cat /etc/shadow"
std: afpovertcp.cfg
std: afpovertcp.cfg~orig
std: aliases
std: aliases.db
std: apache2
err: cat: /etc/shadow: No such file or directory

相关内容