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管理者ではなく、この問題を解決するために情報を掘り下げるのに1週間を費やす必要があるという考えに応えました。私はいくつかのソフトウェアをテストするために年に数回このマシンを開いてログインするので、マシンが動作するはずです。

期待通りに動作するようにシェルを変更するにはどうすればよいですか?


これは関数の例です。これにより、Gitリポジトリのブランチをすばやくリセットし、1つのコマンドで更新できます。 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 ...

ベストアンサー1

おすすめ記事