如何在多个脚本中重用一个函数?

Tim*_*Tim 6 scripting bash function

在 bash 中,有时我想在多个脚本中重用一个函数。在所有脚本中重复函数的定义是不是很糟糕?如果是这样,有什么好的做法?

以下方式是个好主意吗?

  • 将函数的定义包装myfunction在它自己的脚本中define_myfunction.sh
  • 在调用函数的任何脚本中source define_myfunction.sh,然后调用函数myfunction arg1 arg2 ...

谢谢。

Kus*_*nda 5

在 中bash,这是一个很好的方法,是的。

source使用or获取“库”脚本.可以充分解决您想要在两个或多个脚本之间共享函数定义的问题。每个需要访问“库”脚本中定义的函数的脚本都会获取所需的文件,可能位于脚本的顶部。

这将允许您在单个“库”脚本中收集相关函数并获取它以访问它们。

并非完全无关,但bashshell 还能够在执行非交互式 shell(即脚本)时自动获取文件。这可用于为脚本设置特定环境:

BASH_ENV="$HOME/stuff/script.env" ./myscript
Run Code Online (Sandbox Code Playgroud)

... wherescript.env可以做任何事情,从定义函数和设置 shell 或环境变量,到获取其他文件等。


某些 shell(例如ksh93)具有指向可能包含此类函数定义脚本的目录的环境变量。在 中ksh93,该变量称为FPATH。脚本$FPATH/foo会包含一个名为 的函数foo,当用户foo在命令行(或脚本中)键入时会自动找到该函数。据我所知, shellbash不具有此特定功能。

其他 shell 具有其他形式的“自动加载”功能。