我有一个打开的终端,我调用了一个 bash 函数:
change_path
在哪里:
change_path(){
export PATH="foobar:$PATH";
}
将change_path
始终在当前 shell 中运行并始终更改当前 shell 的 $PATH?到目前为止,在我的测试中,情况似乎如此,但很难确定。
答案1
是的,您调用的函数正在当前 shell 中运行。
假设该函数已在当前 shell 中导入(定义)。这可以通过获取一些文件(如 ~/.bashrc)或在当前 shell 中手动编写函数来完成。您可以通过执行以下命令来确认这个假设:
$ type -a change_path
如果打印函数定义,则该函数已在当前 shell 中定义,并且可以访问当前 shell 变量,可以修改其中的任何变量。
这并不意味着如果函数得到适当限制,函数将始终修改变量,例如使用(...)
而不是{...}
:
$ change_path()(
export PATH="foobar:$PATH";
)
但该函数实际上仍在当前 shell 中运行,只是它启动了一个子 shell(...)
要确认这一点,请阅读 bash 手册(重点是我的):
函数
一个 shell 函数,如上面 SHELL GRAMMAR 中所述定义,存储一系列命令以供以后执行。当 shell 函数的名称用作简单命令名称时,将执行与该函数名称关联的命令列表。函数在当前 shell 的上下文中执行;没有创建新进程来解释它们(与 shell 脚本的执行进行对比)。