bash関数を設定解除または削除するにはどうすればよいですか?


33

bashで環境変数を設定またはエクスポートする場合は、設定を解除できます。bashでエイリアスを設定すると、エイリアスを解除できます。しかしがあるようには思えないunfunction

たとえば、.bash_aliasesファイルに設定し、シェルの初期化時に読み取るこの(簡単な)bash関数を検討してください。

function foo () { echo "bar" ; }

現在のシェルからこの関数定義をクリアするにはどうすればよいですか?
(初期化ファイルの変更またはシェルの再起動はカウントされません。)


言われていることはすべてunfunction、コマンドのいい名前です
ジョーイ

@JohannesRössel:zshが持っています。
クリスジョンセン

なるほど。それでも、私はPowerShellのこの少しずつ直観的で一貫性のあるすべての対処方法を見つけました:
Joey

回答:


50

解除は組み込みコマンド、オプションを取る-f削除機能に、:

unset -f foo

フォーム設定解除のエントリのbashの manページを:

-fを指定すると、各名前はシェル関数を参照し、関数定義は削除されます。

注:-f同じ名前の変数が存在する場合にのみ本当に必要です。あなたもという名前の変数を持っていない場合はfoo、その後、unset foo機能を削除します。


それは私が行方不明でした。私-fエクスポートでパラメータを見つけましたが、unsetでそれを見つけていませんでした。ありがとう。
いんちきキホーテ

2
@XavierStuvw:unset外部コマンドではなく、シェル(この場合はbash)の一部です。man bashのエントリを試してみてくださいunset(管理は非常に大きく、セクションのunset下にありShell Builtin Commandsます)。
クリスジョンセン

4

参照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 --helpman unset


4
ありませんman unset、それはですので、内蔵コマンドとのためのビルトインコマンドの代わりにありますhelp。一部の組み込みコマンドには、外部実行可能ファイルも存在します。疑わしい場合は、例えばを試してくださいtype mycommnad。たとえばtype unset、それはあなたに答えます unset is a shell builtin。実行可能ファイルが存在するかどうかを知りたい場合はwhich echo(別のbuikt-in)を試してみてください。--option_long実行可能なコマンドの典型的なものです。試してみてくださいecho --help/bin/echo --help:-)
ハスター

@Hasturテールを編集して、回答に自由にコメントを追加してください。レビューアがそれを承認すると、2ポイントが付与されます。
-XavierStuvw

1
... Xavierの考えに感謝します。答えを完成させるよりも、あなたにとって重要でした。あなたはそれが組み込みコマンドであり、彼らのためにのhelp代わりに使用する必要があることを逃したと思いますman。(SHELL BUILTIN COMMANDSman bashの章で、または...で直接それらを見つけるため、実際には真実ではありません。)bashシェルの下で単純に要求することができ、組み込みコマンドのリストを受け取ることができます。(試してみてくださいと、あまりにも)。man BASH-BUILTINShelp:-)help helpman man
ハスター

1
@Hasturすべての読者の利益のために答えを完成させることができます。その後、コメントを削除して、小さな印刷物が散らかるのを防ぎます。
-XavierStuvw
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.