
私はさまざまなコンポーネントをコンパイルするためにシェルスクリプトを使用しています。別のシェルスクリプトを呼び出す基本スクリプトがあります。ここに例があります。
Repo/build.sh
Repo/code/mode/1/build/build_1.sh
Repo/code/mode/1/build/
これで、フォルダに移動してスクリプトを実行するとbuild_1.sh
機能します。
build_1.sh
しかし、スクリプトが呼び出されると、build.sh
ビルドは機能しません。
#!/bin/bash
#!/usr/bin/env bash
REPO=/home/${USER}/project
set -o errexit
set -o nounset
set -o pipefail
(cd ${REPO}/code/mode/1/build/; ./build_1.sh)
上記の方法がうまくいかないのはなぜですか? envがすでに設定されていると思いますREPO
。
答え1
問題は設定時です。REPO
シェル変数export
、あなたはそうなるためにこれをするわけではありません環境変数。
残念ながら、まだ詳細を提供していません。どのようにbuild_1.sh
内部で呼び出すと、ビルドは機能しませんが、build.sh
スレーブスクリプトがそのREPO
変数に依存している場合は、スレーブスクリプトをエクスポートしないと表示できないため、問題が発生します。
救済策はおそらく (私が言ったように、質問にはまだ詳細がありません。)実際に変数をエクスポートしています。これを行うには、次のように指定します。
export REPO=/home/${USER}/project
あなたのスクリプトから。
この回答の以前のバージョンに関する推論の根本的なエラーを指摘した@ilkkachuに感謝します。