如何在一行中导出文件中的所有 Bash 函数?

use*_*970 7 bash bash-functions

在 Ubuntu 16.04 中,我有一个 Bash 文件,其中包含一些不同的功能,用于在我的系统上自动执行各种常见任务。

我已经获取了该文件,bashrc因此我可以在需要时从终端的任何地方轻松调用每个函数,因此我们可以说“函数本身是来源”。

有时候,我需要使用这些功能源自一个在脚本中,我需要规规矩矩这个动作:

export -f myFunc_0 myFunc_1 myFunc_2 ...
Run Code Online (Sandbox Code Playgroud)

否则,我将无法使用这些功能。


我怎么能对文件中的所有函数进行启动,而不注意特定的函数?

jes*_*e_b 11

如果您使用set -a在您的任一.bashrc或内部函数文件本身就标志着所有出口的功能。

4.3.1 Set 内置

-一种

创建或修改的每个变量或函数都被赋予导出属性并标记为导出到后续命令的环境。

如果您正在设置不想导出的变量,这可能会导致一些不良结果,但您可以将类似的内容添加到您的.bashrc:

set -a
source ~/my_funcs
set +a
Run Code Online (Sandbox Code Playgroud)


Ste*_*itt 8

您真正应该做的是获取包含脚本本身内部函数的文件,这样它就不会依赖于上下文(或者更确切地说,它不太依赖于上下文)。


Olo*_*rin 7

你可以尝试这样的事情:

declare -fx $(bash -c 'source /path/to/my-file &> /dev/null; compgen -A function')
Run Code Online (Sandbox Code Playgroud)

由于您只想从文件中导出函数,因此在 bash 的新实例中获取它,然后使用compgen -A function将列出该文件中定义的所有函数的名称(以及以前导出的函数,但这应该不是问题) . 然后你可以使用它的输出export -fdeclare -fx来导出这些函数。

当您在 bashrc 中获取文件时,重新获取它可能不会有问题。