0

次のようなbashスクリプト「build.sh」があります。

# load Xilinx environment settings
source $XILINX/../settings32.sh

cp -r "../../../EDK/platform" "hw_platform"

if [ $# -ne 0 ]; then
    cp $1/system.xml hw_platform/system.xml
fi

echo "Done"

通常、「./build.sh」として実行し、「source」ステートメントを実行して環境変数を正しく設定します。スクリプトに別の場所からファイルをコピーさせる必要がある場合があります。「./build.sh ~/alternative_path/」として実行します。私のスクリプトは、$# を 0 に対してチェックすることで、cmd ライン引数があるかどうかをチェックします。

私がそうすると、スクリプトの先頭にある「ソース」ステートメントがどういうわけかスキップされ、ビルドが失敗しました。「ソース」の前後に 2 つの「エコー」を配置すると、エコー ステートメントが実行されることがわかります。

現在、「source $XILINX/../settings32.sh; build.sh」でこの問題を回避しています。ただし、スクリプトで間違ったことを教えてください。ありがとう。

4

1 に答える 1

1

最初に位置パラメータの値を配列変数に保存してから、それらを 0 にリセットしてみて"$XILINX/../settings32.sh"ください。いくつかの引数を検出すると、動作が異なる場合があります。

# Store arguments.
ARGS=("$@")

# Reset to 0 arguments.
set --

# load Xilinx environment settings
source "$XILINX/../settings32.sh"

cp -r "../../../EDK/platform" "hw_platform"

if [[ ${#ARGS[@]} -ne 0 ]]; then
    cp "${ARGS[0]}/system.xml" hw_platform/system.xml
fi

echo "Done"
于 2013-09-13T23:12:00.407 に答える