私はこれを持っています:
foo(){
install_ores_gitflow;
command foo "$@"
}
export -f foo;
私は次のようなものを探しています:
export foo(){
install_ores_gitflow;
command foo "$@"
}
しかし、構文が正しくありません。
私が見つけた一つの技術は次のとおりです。 ファイルのすべてのBash機能を1行にエクスポートするには?
これは私がこれを行うことができることを意味します:
set -a;
foo(){
install_ores_gitflow;
command foo "$@"
}
set +a;
しかし、ソーシングスクリプトにset -a
非常に間違ったスクリプトがある可能性があるため、このソリューションは気に入らません。これは私のスクリプトがそれを上書きすることを意味します。
答え1
厄介なハッキングですが、少なくともexport
命令を出すことはできます。以上関数定義をより簡単に見ることができます。
# a function to create a dummy function and export it
export_function() { eval "function $1 { :; }; export -f $1"; }
# then
export_function foo
foo() { echo "here is the *real* function"; }
答え2
-a
たとえば、オプションの状態を確認してオプションがecho $-
設定されている場合は、何もする必要がないように使用するのはどうでしょうか。
答え3
まあ、私はこれが合理的で信頼できるアプローチだと思います。
#!/usr/bin/env bash
if [[ ! "$SHELLOPTS" =~ "allexport" ]]; then
set -a;
all_export=nope;
fi
ores_git_merge_with_integration(){
install_ores_gitflow;
command "$FUNCNAME" "$@"
}
ores_git_tools(){
install_ores_gitflow;
command "$FUNCNAME" "$@"
}
if [ "$all_export" == "nope" ]; then
set +a;
fi
Bashスクリプトでは、エクスポートするすべての関数をグループ化し、set -a / set +コマンドで囲むことができます。
環境変数を確認する目的$SHELLOPTS
は、set -aがオンになっていないことを確認することです。それ以外の場合は、完了したらオフにする必要があります。