2013-05-27 2 views
1

Я не эксперт по созданию сценариев bash, но я действительно не понимаю, что здесь делается. Мой сценарий заключается в следующем:странная ошибка при прохождении аргумента к 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 [email protected]" 

я называю его, как ./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?

ответ

3

Исходный сценарий запускается в текущей среде без изменения значения позиционных параметров. Значение «$ @» одинаково для вызываемого скрипта, как для вызывающего скрипта.

Вы можете использовать

set -- 

очистить позиционные параметры. Если вам нужно сохранить их, используйте

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

Похоже, вы вызываете файл сценария с -v опцией. Обратите внимание: source не изменяет значения параметров командной строки ($1), если позиционные параметры не указаны в команде source.

Смежные вопросы