我在 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 ...