sh互換bash関数を作成する方法

sh互換bash関数を作成する方法

このbash機能があります。

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

この関数はbashとしてのみインポートして実行する必要がありますが、ある神の祝福のためにshにインポートして実行されます。

上記の機能は次のように使用できます。

zmx foo bar

r2g:fooコマンドのstdout / stderrの前に追加されます。

だから私の質問は - 上記のbash機能をshが利用可能なものに変換する方法を知っている人はいますか?

shが関数を解釈すると構文エラーが発生します。私はこの関数を解釈するためになぜshが呼び出されるのかを調べるために数ヶ月間努力してきましたが、shがそうするのを防ぐ試みをほとんど放棄しました。

ベストアンサー1

POSIXで動作する別のアプローチは次のとおりですsh

zmx() {
    "$@" 2>&1 | sed 's/^/r2g: /'
}

これにより、read微妙な処理を防ぐことができます。

これらのシェルの断片を直接確認するには、次のものを使用できます。住宅検査#!/bin/shPOSIXシェルを使用したいと知らせるためにshebangを追加すると、何を修正するかを教えてくれます。

おすすめ記事