Bashスクリプトから派生しており、各スクリプトには主な機能があります。

Bashスクリプトから派生しており、各スクリプトには主な機能があります。

バッシュ4.4.20を使用しています。私は通常、すべてのbashスクリプトに主な機能を持っています。他のbashスクリプトの他の関数からこのスクリプトをインポートしたい場合は、両方のスクリプトの基本関数定義と競合しますか?

#A.sh
main() {
SomeFunction 
}

SomeFunction(){
. B.sh
}

main "$@"
#B.sh

main(){
echo Hi
}

main "$@"

主な機能の名前を変更せずに解決策はありますか?

ベストアンサー1

別のスクリプトが上書きされますmain()。はい。この特別なケースでは、main()スクリプトAの実行中にスクリプトBが関数をオーバーライドするので、これが重要かどうかはわかりません。シェルがすでに実行中の関数の動作をオーバーライドできるようにするかどうか疑問に思われます。

つまり、次のスクリプトが提供されます。

$ cat a.sh
main() {
    echo a1
    . ./b.sh
    echo a2
}
main "$@"

$ cat b.sh
main() {
    echo b
}
main "$@"

どのシェルでも実行すると、print、、、a.shを見つけることができます。もう一度呼び出すと、もちろん新しい動作が発生します。a1ba2a.shmain

しかし、ここでは重要ではありませんが、このような関数を動的にオーバーライドすることは少なくとも混乱します。

より良い質問は、なぜあなたが必要ですか?源泉最初のスクリプトB? Bを調達を通じてロードされる関数の集合(一種のライブラリ)と考えることがより明確に見えます。またはソースではなく汎用プログラムと呼ばれるスタンドアロンユーティリティとして扱います。

最初のケースでは、Aは必要に応じてAで定義されている関数を明示的に呼び出します。

おすすめ記事