将参数传递给bash脚本时出现奇怪的错误

时间:2013-05-27 22:11:28

标签: bash scripting

我不是bash脚本的专家,但我真的不明白这里的内容是什么。我的脚本是这样的:

#!/usr/bin/env bash

echo "calling asetup"
export ATLAS_LOCAL_ROOT_BASE=/cvmfs/atlas.cern.ch/repo/ATLASLocalRootBase
source ${ATLAS_LOCAL_ROOT_BASE}/user/atlasLocalSetup.sh
asetup 17.6.0,slc5

echo "Now running..."
echo "argument $@"

我将其称为./myscript -v,输出为:

calling asetup
atlasLocalSetup.sh: invalid option -- 'v'
'atlasLocalSetup.sh --help' for more information
./prova.sh: line 12: asetup: command not found
Now running...
argument -v

在第二行,什么是atlasLocalSetup.sh: invalid option -- 'v'?为什么使用atlasLocalSetup.sh选项调用-v

2 个答案:

答案 0 :(得分:3)

源脚本在当前环境中运行,而不更改位置参数的值。对于调用脚本,“$ @”的值与调用脚本的值相同。

您可以使用

set --

清除位置参数。如果您需要保存它们,请使用

pos_par=("$@")
set --
source script.sh
set -- "${pos_par[@]}"

答案 1 :(得分:0)

您似乎使用-v选项调用脚本文件。请注意,除非为source命令提供位置参数,否则$1不会更改命令行参数(source)的值。