呼び出されたスクリプトの各エコーの前にテキストをどのように追加できますか?

呼び出されたスクリプトの各エコーの前にテキストをどのように追加できますか?

1つは、もう1つを呼び出す2つのスクリプトがあると仮定して、各エコーの前にテキストを追加して呼び出されるコマンドでエコーが発生したことを視覚的に表示するにはどうすればよいですか?

禁煙健康増進協会

#!/usr/bin/env sh
echo - BEGIN
./b.sh # Append "-" to each echo?
echo - END

b.sh

#!/usr/bin/env sh
echo - BEGIN
echo - END

私が望む出力:

- BEGIN
-- BEGIN
-- END
- END

私は届かないb.sh出力をストリーミングする必要があります。

答え1

echo前に a が付いた希望のコマンドのテキスト出力である場合、これを関数として-オーバーライドします。echo源泉他のスクリプトには.特別な組み込み関数があるため、その関数を継承します。

#!/usr/bin/env sh
printf '%s\n' '- BEGIN'
echo() {
  printf %s -
  command echo "$@"
}
. ./b.sh
printf '%s\n' '- END'

(とにかく参考にしてください。echo避けるのが一番)

答え2

2番目のスクリプトで印刷されたすべての出力にそれを追加するには、その出力をseda.sh

#!/usr/bin/env sh
echo - BEGIN
./b.sh | sed 's/^/-/' 
echo - END

その結果は次のとおりです。

$ a.sh
- BEGIN
-- BEGIN
-- END
- END

関連情報