Bashで環境変数を設定またはエクスポートする場合、nsetを使用できます。 bashでエイリアスを設定する場合、naliasを使用できます。しかしnfunctionはないようです。
たとえば、(簡単な)bash関数を考えてみましょう。 .bash_aliases ファイルを作成し、シェルの初期化時に読み取ります。
function foo () { echo "bar" ; }
現在のシェルからこの関数定義をクリアするにはどうすればよいですか?
(初期化ファイルの変更またはシェルの再起動はカウントされません。)
nset組み込みコマンドはオプション-f
を取り、関数を削除します。
unset -f foo
bashマンページにnsetエントリを作成します。
-fが指定されている場合、各名前はシェル関数を参照し、関数定義は削除されます。
注:-f
は、同じ名前の変数が存在する場合にのみ必要です。 foo
という名前の変数もない場合、unset foo
は関数を削除します。
見る help unset
:
unset: unset [-f] [-v] [-n] [name ...]
Unset values and attributes of Shell variables and functions.
For each NAME, remove the corresponding variable or function.
Options:
-f treat each NAME as a Shell function
-v treat each NAME as a Shell variable
-n treat each NAME as a name reference and unset the variable itself
rather than the variable it references
Without options, unset first tries to unset a variable, and if that fails,
tries to unset a function.
Some variables cannot be unset; also see `readonly'.
Exit Status:
Returns success unless an invalid option is given or a NAME is read-only.
どちらもありませんunset --help
またはman unset
残念ながら。
私は最近、nvm
を完全にアンインストールして再インストールし、その環境をすべて削除したいと考えていました。 nvm
の大部分は.bash_profile
または.bashrc
を介してシェルに供給されるシェル関数のボートロードとして部分的に実装されているため、それを取り除くことはできないようですどこにソースコマンドを追加したかにかかわらず、最初にインストールしたときに表示されます。
最初はwhich nvm
が何も返さずに明らかに困惑しましたが、nvm
コマンドやその他のコマンドはまだ見つかっていましたが、declare -F
を介して、シェル関数の集まりであることがわかりました。シェルを終了して新しいシェルを開始したくなかったので(ここでは関係ない理由で)、次のようにして、シェルからnvm
関数をクリアしました。
for F in `declare -F | grep -e nvm | cut -f 3 -d\ `; do unset -f $F; done
そのいくつかのバリエーションは、何らかの理由で同じようなことをしたい、新しいシェルを再起動できない、またはしたくないという人にとって役立つかもしれません。