首页 > 解决方案 > 在多个 bash 脚本中包含常用函数

问题描述

使用 Ubuntu 18.04。我的.bashrc文件包括以下行:

if [ -f ~/.bash_usr_functions ]; then
    . ~/.bash_usr_functions
fi

.bash_usr_functions中,有一堆用户定义的函数,例如:

function MyAmazingFunc()
{
    echo 1st param: $1
    echo Function body is complex...omitted for brevity
}

现在,每当启动一个新的 Linux 终端时,输入都会MyAmazingFunc 37按预期工作。伟大的!

现在我编写了一个新的 bash 脚本。该脚本想了解和使用AmazingFunc. 我曾期望使用此代码自动执行此操作:

#!/bin/bash
AmazingFunc 37

但是当我使用它运行它时bash ./NewScript.sh出现错误:Command 'MyAmazingFunc' not found

因此,我修改NewScript.sh为包含以下相同的行.bashrc

if [ -f ~/.bash_usr_functions ]; then
    . ~/.bash_usr_functions
fi

这似乎有效,但非常不雅。Sourcing.bash_usr_functions实际上启动了一个新的子bash进程并运行任何代码.bash_usr_functions!这可以通过在该文件中放置类似echo Hello from user functions或的内容来验证。read VAR1

有没有更好的方法将您自己的用户函数包含在代码库(即许多脚本)中,而不必将整个函数复制到每个 bash 脚本中或使用source

标签: bashshellubuntu-18.04

解决方案


将此添加到您的~/.bashrc以将您的函数导出到随后执行的命令的环境中:

export -f MyAmazingFunc

看:help export


推荐阅读