bash機能を上書きしないように保護する方法は?読み取り専用に設定

bash機能を上書きしないように保護する方法は?読み取り専用に設定

bashシェルではf関数を定義できます。

f(){ echo Hello; }

その後、エラーや警告メッセージなしで再宣言/再定義します。

f(){ echo Bye; }

私はこのように関数がオーバーライドされないように保護する方法があると思います。

ベストアンサー1

または、(同じ)を使用して関数をfoo読み取り専用として宣言することもできます。これらの組み込みユーティリティのオプションを使用すると、そのユーティリティは変数ではなく関数名として機能します。readonly -f foodeclare -g -r -f fooreadonlydeclare -g -r-ffoofoo

$ foo () { echo Hello; }
$ readonly -f foo
$ foo () { echo Bye; }
bash: foo: readonly function
$ unset -f foo
bash: unset: foo: cannot unset: readonly function
$ foo
Hello

ご覧のように、関数を読み取り専用にすることで上書きを防ぐことができるだけでなく、設定解除(完全に削除)も防止できます。


現在の(現在の)bash-5.0.11シェルオプション()を使用している場合、読み取り専用機能を変更しようとするとシェルは終了しません。チェット、マネージャー、errexitset -ebash間違いだったと言いました。そして、次のバージョンでは変更される予定です。

更新:この問題は2019年10月に解決されたため、bash-5.1-alphaシェルオプションが有効になっている間に読み取り専用機能を変更しようとすると、5.1以降のバージョンが正しく終了します。basherrexit

おすすめ記事