[英]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.