我有一个bash脚本linge.sh,我使用
source ${HOME}/Opstk/bin/linge/linge.sh
现在,我希望通过调用bash文件,在linge.sh中包含其他功能(可选地启用)
${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发布于 2021-10-07 12:31:49
当您source一个文件时,您正在执行当前shell中该文件中的命令。这与您将文件内容直接输入终端,逐行输入文件的内容没有本质上的不同。对于您的.bashrc也是如此--当它被获取时,它只是在当前shell中运行所有这些命令,并且当它获取其他文件时,它们也会在当前shell中运行。文件的来源可以是一种将你的.bashrc分解成不同模块的好方法,所以你不会每次想要调整某个东西时都会看到一个巨大的文件。
另一方面,export为从其导出的shell执行的命令提供给定的名称/变量。例如,如果要在shell中定义变量FOO=bar而不导出变量,然后运行一个脚本,希望FOO在该脚本的上下文中仍然相等于"bar“,那么您就错了--没有向运行脚本的子shell提供额外的上下文,因此FOO将在那里取消设置。使用export会解决这个问题,因为它告诉shell提供该名称,并将其设置为一个给定的值(如果提供的话),以处理由此产生的任何进程,包括脚本。
因此,对于您最初的问题--如果您想在运行一个新的shell后立即定义您想要拥有的函数,那么在您的.bashrc中找到一个包含它们的文件就可以了。类似地,如果您试图将一些函数有效地导入到要使用这些函数的其他文件中,则只需将包含这些函数的文件(S)源到要使用它们的文件中。唯一需要export的时候是,如果您正在运行某个子进程,希望能够访问您定义的名称。
前面已经说过,在将来,当您遇到这样的问题时,请记住首先检查help或man --从长远来看,它可以为您节省很多麻烦。
https://unix.stackexchange.com/questions/672159
复制相似问题