bash関数の場合にのみ実行されます。

bash関数の場合にのみ実行されます。

command私は関数なら何かを実行するBashの組み込み機能に似たものを探しています。したがって、現在安全でないアプローチがあります。

# Go through arguments in order
for i in $*; do
    if [ -z `which $i` ]; then
        # Run function
        $i && echo -n ' '
    fi
done

このifステートメントは正しく機能しません。とにかく、それが関数ではなくコマンドであるかどうかを確認できても、明示的に関数を実行することはできません。これは、誰かが$ PATHに私の関数と同じ名前のプログラムを持っている場合に実行されるため、これはお勧めできません。 PATHをキャンセルしたり他のものに設定したりしても、誰でも$ iを使って明示的にプログラムを実行できるので、これも解決策ではありません。

私のシェルスクリプトを「保護」する方法はありますか?

ベストアンサー1

を使用すると、bash次のことができます。

for f do
  if declare -F -- "$f" >/dev/null 2>&1; then
    : "$f" is a function, do something with it
  fi
done

declare -F -- "$f" >/dev/null 2>&1$fbash関数の場合、成功コードが返され、何も出力されません。

bashPOSIXモードで実行するときbuiltin enable -n -- "$f"

おすすめ記事