在 Ubuntu 16.04 中,我有一个 Bash 文件,其中包含一些不同的函数,用于在我的系统上自动执行各种常见任务。
我已经获取了该文件,bashrc
因此我可以在需要时从终端的任何位置轻松调用每个函数,因此我们可以说“函数本身是有源的”。
有时我需要从脚本内部使用这些源函数之一,并且我需要使用以下命令启动此操作:
export -f myFunc_0 myFunc_1 myFunc_2 ...
否则,我将无法使用这些功能。
在不注意特定功能的情况下,我如何才能对文件中的所有功能进行启动?
如果您
set -a
在您的.bashrc
或函数文件本身中使用,它将标记所有要导出的函数。如果您正在设置不想导出的变量,这可能会导致一些不良结果,但您可以将类似这样的内容添加到您的
.bashrc
:您真正应该做的是获取包含脚本本身内部函数的文件,这样它就不会依赖于上下文(或者更确切地说,它不会依赖于上下文)。
您可以尝试以下方法:
由于您只想从文件中导出函数,因此在新的 bash 实例中获取它,然后使用
compgen -A function
将列出该文件中定义的所有函数的名称(以及以前导出的函数,但这应该不是问题) . 然后,您可以将其输出与export -f
或declare -fx
导出这些函数一起使用。当您在 bashrc 中采购文件时,重新采购它可能不会成为问题。
看看 BASH_ENV
当 bash 以非交互方式执行 shell 脚本时,不读取 .bashrc 并且不获取函数文件。
如果将 BASH_ENV 设置为函数文件的名称,则读取并执行该文件,如 INVOCATION 中所述。
因此无需在每个使用该函数的 shell 脚本中获取函数文件。
举例说明:
不是 Ubuntu,而是 debian-linux 4.14.0-3-amd64 #1 SMP Debian 4.14.17-1 (2018-02-14) x86_64 GNU/Linux with Xfce 4.12
在你的文件中创建一个函数文件
$HOME
创建一个使用该函数的脚本
这里脚本源函数文件
lescript
在上创建一个laucherDesktop
无需终端
执行它。
文件
~/lapiste
已更新。现在
. ~/mesfuncbash
从lescript
执行它
该文件
~/lapiste
未更新。如果你
lescript
在终端上运行Bash 告诉你:
现在您必须设置
BASH_ENV
为函数文件的名称。在带有 xfce 的 debian 中,
.profile
在启动时不会读取,因此您不能使用它来设置BASH_ENV
.您必须
.xsessionrc
在$HOME
.注销登录,这种方式
.xsessionrc
在启动时读取现在,您可以在桌面上执行 laucher 并
~/lapiste
更新文件。的输出
set
似乎有利于提取所有定义的函数。它从变量开始,然后显示函数,所以:这会查找第一个未赋值(出现
()
在 first 之前=
),然后说可以打印。当变量functions
为真时,第二个 awk 节使用默认的打印操作。输出保存在 中functions.sh
,然后可以从其他地方获取。只需使用以下
env
命令: