この質問の別のタイトルは次のとおりです。
「親シェルで認識されたコマンドがサブシェルに見つかりませんでした」
私はこれを親シェルに持っています
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
子シェルは親シェルの環境を継承します。
環境には、親シェルからエクスポートされたコンテンツが含まれます。
シェル機能をエクスポートしないと、子プロセス環境には存在しません。
bash
bash
シェル関数は、以下を使用してサブシェルで使用するためにエクスポートできます。
export -f functionname
親シェルから。