bashではなくshが.bashrcで定義された関数について文句を言うのはなぜですか?

bashではなくshが.bashrcで定義された関数について文句を言うのはなぜですか?

端末セッションを開くと、次の結果が表示されます。

sh: 'read.json' の関数定義の取得中にエラーが発生しました。

sh: 'ts-project' の関数定義の取得中にエラーが発生しました。

shは次の機能が好きではありません:

read.json(){
   ::
}

そして

ts-project(){
   ::
}

実際の質問は - なぜshこれらのファイルに触れるか解釈するのですか?私はMacOSを使用しており、以前にこれを見たことがありますが、かなり謎です。私はbashだけがこれらのファイルをロードすると思います。

修正する:bashとshは特別なものではありません。端末に bash と入力すると、次のような結果が表示されます。

alex$ bash
beginning to load .bashrc
finished loading .bashrc
bash-3.2$ 

sh端末に入力すると、次の結果が表示されます。

alex$ sh
sh: error importing function definition for `read.json'
sh: error importing function definition for `ts-project'
sh-3.2$ 

ベストアンサー1

bash同様のファイルを解釈して関数をロードするのではなく、これらの関数を偽装したPOSIXシェルが環境からインポートしようとするとエラーが発生します~/.bashrc。単純化された例:

foo.bar(){ true; }; export -f foo.bar; bash --posix -c true
bash: error importing function definition for `foo.bar'

もともと私はbashposixモードの環境で関数をロードしようとしませんでした。もちろん、名前に興味深い文字が含まれている場合にのみ文句を言います。

環境変数を設定またはコンパイルすると、bashposixモードでも実行されることに注意してください。POSIXLY_CORRECTPOSIX_PEDANTIC--enable-strict-posix-defaultSTRICT_POSIX

/bin/sh後者はMacOSの場合のようです。ここPRODUCT_NAME = sh)の場合、または同じライブラリ関数を使用してもこのエラーが発生すると予想されます。popen(3)system(3)

おすすめ記事