我有一个 bash 脚本linge.sh
,我从我的.bashrc
使用中调用它
source ${HOME}/Opstk/bin/linge/linge.sh
现在我想linge.sh
通过调用 bash 文件来包含可选启用的附加功能
${HOME}/Opstk/bin/linge/edvart/edvart.sh
只需使用
source ${HOME}/Opstk/bin/linge/edvart/edvart.sh
在
${HOME}/Opstk/bin/linge/linge.sh
?
我希望每当用户启动终端时函数调用都可用。
函数的定义如下
linge-environ-texinfo
{
...
}
export -f linge-environ-texinfo
当我在终端时,我只想按我的意愿调用该函数
linge-environ-texinfo -opt1 --opt2=val param1 param2
答案1
当您source
访问文件时,您将在当前 shell 中执行该文件中的命令。这与您自己直接在终端中逐行输入文件内容本质上没有什么不同。这同样适用于你的.bashrc
- 当它被获取时,它只是在当前 shell 中运行所有这些命令,并且当它获取其他文件时,它们也会在当前 shell 中运行。采购文件可以是一种将您的各个部分分解.bashrc
为不同模块的巧妙方法,这样您就不必每次想要调整某些内容时都查看一个巨大的文件。
export
另一方面,为从其导出的 shell 执行的命令提供给定的名称/变量。例如,如果您要FOO=bar
在 shell 中定义一个变量而不导出它,然后运行一个脚本,希望FOO
在该脚本的上下文中仍然等于“bar”,那么您就错了 - 额外的上下文尚未提供给您的脚本运行的子 shell,因此FOO
将在那里取消设置。使用export
可以解决这个问题,因为它告诉 shell 提供该名称并将其设置为给定值(如果提供),以用于从中生成的任何进程(包括您的脚本)。
因此,对于您最初的问题 - 如果您正在定义您希望在运行新 shell 后即可使用的函数,那么在您的.bashrc
意愿中获取包含它们的文件就可以了。同样,如果您尝试将某些函数集有效地导入到要使用这些函数的其他文件中,则只需将包含这些函数的文件获取到您要使用它们的文件中即可。唯一export
需要的情况是您正在运行某个需要访问您定义的名称的子进程。
话虽如此,以后遇到这样的问题时,请记住首先检查help
或man
- 从长远来看,这会为您省去很多麻烦。