如何取消设置或者摆脱 bash 函数?

如何取消设置或者摆脱 bash 函数?

如果你在 bash 中设置或导出环境变量,你可以取消设置如果你在 bash 中设置了别名,你可以匿名但似乎没有功能不全

考虑这个(简单的)bash函数,例如,设置在.bash_别名文件并在 shell 初始化时读取。

function foo () { echo "bar" ; }

我怎样才能从当前 shell 中清除此函数定义?
(更改初始化文件或者重新启动 shell 不算。)

答案1

取消设置内置命令采用选项-f来删除函数:

unset -f foo

形成取消设置进入狂欢手册页:

如果指定了 -f,则每个名称都引用一个 shell 函数,并且函数定义将被删除。

注意:-f只有存在同名变量时才真正需要。如果您没有名为的变量foounset foo则会删除该函数。

答案2

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

答案3

我最近想彻底卸载nvm并重新安装它,并摆脱它的任何环境。事实证明,摆脱它似乎并不是一件容易的事,因为大部分的nvm实现都是作为一大堆 shell 函数实现的,这些函数通过.bash_profile或被导入到你的 shell 中.bashrc,或者在你第一次安装它时它告诉你添加的那些源命令的任何地方。

一开始我感到很困惑,因为which nvm什么都没返回,但显然命令nvm和其他命令仍在被找到,最后我发现declare -F这是一堆 shell 函数。我不想直接杀死 shell 并启动一个新 shell(原因与此无关),所以我nvm用这个清除了该 shell 中的函数:

for F in `declare -F | grep -e nvm | cut -f 3 -d\ `; do unset -f $F; done

某些变化可能会对那些出于某种原因想要做类似的事情但无法重新启动新 shell 或不想这样做的人有所帮助。

相关内容