Bashスクリプトは親環境を継承しません。

Bashスクリプトは親環境を継承しません。

この質問の別のタイトルは次のとおりです。

「親シェルで認識されたコマンドがサブシェルに見つかりませんでした」

私はこれを親シェルに持っています

source ~/.quicklock/ql.sh

このコマンドは現在のシェルで認識されます。

ql_acquire_lock

次に、次のスクリプトを実行します。

./script/tsc.sh

このスクリプトには次のものがあります。

#!/usr/bin/env bash
set -e;
ql_acquire_lock

unsetなどが明示的に呼び出されない限り、子シェル/プロセスが親環境を継承すると思ったので、シェルがどのように機能するかは本当に混乱しています。

私が得るエラーは次のとおりです。

./scripts/tsc.sh: line 3: ql_acquire_lock: command not found

答え1

子シェルは親シェルの環境を継承します。

環境には、親シェルからエクスポートされたコンテンツが含まれます。

シェル機能をエクスポートしないと、子プロセス環境には存在しません。

bashbashシェル関数は、以下を使用してサブシェルで使用するためにエクスポートできます。

export -f functionname

親シェルから。

関連情報