导入shell脚本函数

23

我有一个函数err(),在文件abc中。这些文件没有.sh扩展名,但它们以#!/bin/bash开头。

err () {
    echo "${1}" >&2 
}

现在我正在另一个文件xyz中导入它:

source abc
someFunction(){ 
    err "Failed to back up"
}

这样导入的方式正确吗?

3个回答

25

是的,您可以按照上面提到的方法或者使用如下方式:. 文件名

文件名不需要以 .sh 结尾。


5

没问题,这里还有一些提示:

  1. 为函数使用命名约定,例如在函数名前加上前缀f_,例如f_err。函数调用与其他命令没有区别,这是对读者的提示。它也减少了名称冲突的可能性。

  2. 您只需要读取访问权限,不需要#!/bin/bash(它只是一个注释)。

  3. 在Bash中,某些选项必须在函数解析之前设置。例如,如果要使用扩展的globbing,则必须在函数外部执行shopt -s extglob。把它放在函数内部太晚了。

  4. Bash不支持FPATH环境变量或autoload(像Korn shell那样)。


3
您需要在新创建的函数末尾进行导出。在abc的末尾添加以下内容:
export -f err

你只需要导出函数,就可以在子shell中使用它(通过运行另一个bash实例启动)。在源文件之后,其中定义的任何函数都将在当前shell中可用。 - chepner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接