如何在 FreeBSD 上使用 Bash IMPORTFUNCTIONS?

如何在 FreeBSD 上使用 Bash IMPORTFUNCTIONS?

我在 FreeBSD 10.1 amd64 上遇到很多错误,因为我使用 Bash 并.bash_profile导出了一些函数。当我尝试在 FreeBSD 上运行测试脚本时,结果如下:

$ ./cryptest.sh 
bash: Skipping importing function definition for `sh_perms': --import-functions required.
bash: Skipping importing function definition for `sh_gclean': --import-functions required.
...
make: environment corrupt; missing value for BASH_FUNC_sh_clean
make: environment corrupt; missing value for BASH_FUNC_sh_clean
make: environment corrupt; missing value for BASH_FUNC_sh_clean
...

我没有找到太多信息,但我确实发现了IMPORTFUNCTIONS在 FreeBSD Bash 页面中

还可以通过选择 IMPORTFUNCTIONS 选项在端口中更改默认值...

我将以下内容添加到.bash_profile、注销、重新登录(甚至是 sourced .bash_profile),但问题仍然存在:

IS_FREEBSD=$(uname -s | grep -i -c freebsd)

if [[ ("$IS_FREEBSD" -ne "0") ]]; then
    export IMPORTFUNCTIONS=y
fi

我知道 FreeBSD 的 CVE 正在修复,但我并不真正关心它。我不是 FreeBSD 管理员,一想到我需要一周时间通过翻阅信息来解决这个问题,我就感到畏缩。我每年只打开并登录这台机器几次来测试一些软件,所以我需要机器工作。

如何修复 shell 使其按预期工作?


这是一个函数的例子;没有什么太多的。它允许我快速重置 Git 存储库上的分支并用一个命令更新它。我使用它们是因为 Git 倾向于采用简单的工作流程,并将其复杂化或使其变得困难甚至不可能(您应该看到删除开发分支是多么困难)。

function sh_gpull {
    if [[ (-z $(git rev-parse HEAD 2>/dev/null)) ]]; then
        echo "$PWD is not a Git repository"
        [[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1
    fi

    echo "Branch:" $(git rev-parse --abbrev-ref HEAD 2>/dev/null)
    git reset --hard HEAD 2>/dev/null
    git pull

    [[ "$0" = "$BASH_SOURCE" ]] && exit 0 || return 0
}

...
export -f sh_gpull ...

相关内容