如果你在 bash 中设置或导出环境变量,你可以取消设置如果你在 bash 中设置了别名,你可以匿名但似乎没有功能不全。
考虑这个(简单的)bash函数,例如,设置在.bash_别名文件并在 shell 初始化时读取。
function foo () { echo "bar" ; }
我怎样才能从当前 shell 中清除此函数定义?
(更改初始化文件或者重新启动 shell 不算。)
答案1
这取消设置内置命令采用选项-f
来删除函数:
unset -f foo
形成取消设置进入狂欢手册页:
如果指定了 -f,则每个名称都引用一个 shell 函数,并且函数定义将被删除。
注意:-f
只有存在同名变量时才真正需要。如果您没有名为的变量foo
,unset 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 或不想这样做的人有所帮助。