我创建了一个bash文件test.sh。此bash的内容如下:
#!/bin/bash
#source another file
export ICS_START=/rdrive/ics/itools/unx/bin/
source $ICS_START/icssetup.sh
XMAIN=false
MAINLINE=false
STARTDIR=${PWD}
# Get args.
usage() {
echo "Usage: $0 [-t <timestamp>] [-m] [-x]"
exit 1
}
parse_args(){
while getopts "ht:mx" OPT; do
case $OPT in
t) DATE=${OPTARG};;
m) MAINLINE=true;;
x) XMAIN=true;;
h) usage;;
?) usage;;
esac
done
}
echo "$@"
parse_args "$@"
#other commands
myrun -d xxx -p xxx --time xxxx
我使用./test.sh -t xxx -m -x
运行该bash文件
在此过程中,第二个源命令受args -t xxx -m -x
的影响,它始终会抛出如下错误:
歧义开关。请使用更多字符。我认为icssetup.sh也定义了这些参数,因此我们彼此之间存在冲突。在不更改arg字符的情况下如何避免这种情况?
我检查了前两行(源命令)和parse_args能否分别正常工作。
任何帮助将不胜感激。
答案 0 :(得分:0)
这是bash发生的事情,而其他shell则没有。脚本的参数将传递到任何源脚本。
一个简单的示例显示出来:
test.sh
#!/bin/bash
source source.sh
echo Original Script: $# : $@
source.sh
#!/bin/bash
echo Sourced Script $# : $@
运行test.sh时,您会看到即使没有参数传递给源脚本,它实际上也会收到原始脚本参数:
# ./test.sh a b
Sourced Script 2 : a b
Original script: 2 : a b
如果您尝试不将任何参数传递给源脚本,则可以尝试强制执行以下操作:
source $ICS_START/icssetup.sh ""