3

私の bash スクリプトが複雑になり始めると、通常、それらを関数に分割します。これは特に複雑なパイプに当てはまります。一連の複雑なパイプ コマンド (たとえば、while ループを含む) はすぐに読みにくくなる可能性があるからです。xargs が非常に役立つ並列化が必要な場合はなおさらです。

を使用して関数をサブシェルにエクスポートできることを知っているexport -fため、単純なケースでは実行できます

export -f myfunction 
some-command | xargs -Iline bash -c "myfunction 'line'"

しかし、myfunctionこれが他の関数に依存している場合、これを維持するのは難しくなります - サブシェルが変更を実行するために必要とする関数が変更されるたびmyfunctionに、エクスポートステートメントを変更する必要があります - それはかなりエラーが発生しやすいようです.

サブシェルで使用する関数をエクスポートする一般的な方法はありますか? 「定義済みのすべての関数をエクスポートする」コマンドの行に沿って何かを考えていました。これにより、次のようなコード構造が可能になります

main() { ... }
func1 () { ... }
func2 () { ... }
<export all functions>
main "$@"
4

4 に答える 4