我不是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
?
答案 0 :(得分:3)
源脚本在当前环境中运行,而不更改位置参数的值。对于调用脚本,“$ @”的值与调用脚本的值相同。
您可以使用
set --
清除位置参数。如果您需要保存它们,请使用
pos_par=("$@")
set --
source script.sh
set -- "${pos_par[@]}"
答案 1 :(得分:0)
您似乎使用-v
选项调用脚本文件。请注意,除非为source
命令提供位置参数,否则$1
不会更改命令行参数(source
)的值。