检查bash脚本中的cmd行参数是否绕过源语句

时间:2013-09-13 23:07:34

标签: linux bash shell command-line-arguments

我有一个像这样的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”来解决这个问题。但是,请告诉我在脚本中做错了什么?感谢。

1 个答案:

答案 0 :(得分: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"