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
$f
bash関数の場合、成功コードが返され、何も出力されません。
bash
POSIXモードで実行するときbuiltin enable -n -- "$f"
。