FreeBSD에서 Bash IMPORTFUNCTIONS를 사용하는 방법은 무엇입니까?

FreeBSD에서 Bash IMPORTFUNCTIONS를 사용하는 방법은 무엇입니까?

.bash_profileBash를 사용하고 일부 기능을 내보내기 때문에 FreeBSD 10.1 amd64에서 많은 오류가 발생합니다 . 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
...

정보가 많이 없긴 했지만 알아냈어요IMPORTFUNCTIONSFreeBSD 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 관리자가 아니며 이 문제를 해결하기 위해 정보를 파헤치는 데 일주일을 소비해야 한다는 생각에 오그라들었습니다. 나는 일부 소프트웨어를 테스트하기 위해 일년에 몇 번만 이 기계를 열고 로그인하므로 기계가 작동해야 합니다.

예상대로 작동하도록 셸을 수정하려면 어떻게 해야 합니까?


이것은 함수의 예입니다. 이를 통해 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 ...

관련 정보