簡體   English   中英

在bash腳本中檢查cmd line參數繞過source語句

[英]Checking cmd line argument in bash script bypass the source statement

我有一個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行參數。

當我這樣做時,腳本開頭的“ source”語句就會以某種方式被跳過,並且構建失敗。 我在“源”之前和之后放置了兩個“ echo”,並且看到執行了echo語句。

目前,我通過“ source $ XILINX /../ settings32.sh; build.sh”規避了這個問題。 但是,請告訴我我在腳本中做錯了什么? 謝謝。

嘗試先將位置參數的值存儲在數組變量上,然后將其重置為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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM