関数のパイプリダイレクトによるエコー時に環境変数が設定されない

関数のパイプリダイレクトによるエコー時に環境変数が設定されない

このコマンドは次のとおりです。

echo '18' | source meta-cmf-raspberrypi/setup-environment

環境変数を設定する代わりに、次のことが起こります。

source meta-cmf-raspberrypi/setup-environment

「18」と入力してください。
リンクの質問:パイプラインから私の関数を呼び出すと、環境変数は設定されません。

すでに試しましたが、問題は解決されませんでした。

echo '18' > >(source meta-cmf-raspberrypi/setup-environment)

成功しませんでした。この問題をどのように解決できますか?

ベストアンサー1

パイプラインでは、スクリプトは別の環境から取得されます。プロセス代替例でも同様である。これは、スクリプトに設定された変数が呼び出しシェルの子環境に設定されることを意味します。子環境の変更は親環境に伝播されません。

別の環境でスクリプトをインポートするのを防ぐために、2つの方法でこの問題を解決できます。

最初のアプローチは、「ここの文字列」を理解するシェルで動作します。

source meta-cmf-raspberrypi/setup-environment <<<18

2番目の方法は、ここで標準文書を使用することです。

source meta-cmf-raspberrypi/setup-environment <<END_INPUT
18
END_INPUT

両方のバリエーションでは、スクリプトは現在の環境で開始され、その入力はここで文字列/ここでドキュメントにリダイレクトされます。

おすすめ記事