1

我不是 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 $@"

我用 as 调用它./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

4

2 回答 2

3

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

您可以使用

set --

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

pos_par=("$@")
set --
source script.sh
set -- "${pos_par[@]}"
于 2013-05-27T22:19:18.680 回答
0

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

于 2013-05-27T22:21:24.290 回答