在bash文件中采购另一个bash文件时出现歧义的args

时间:2018-11-23 06:55:47

标签: bash

我创建了一个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能否分别正常工作。

任何帮助将不胜感激。

1 个答案:

答案 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 ""