shell 文件中的两个源命令不会更新第二次发送到源的参数

问题描述 投票:0回答:1

第一个文件(trigger.sh):

#!/usr/bin/env bash


echo "Configuring tests"
echo "Source 1"
source ./run-1.sh -m "George"

echo "Source 2"
source ./run-1.sh -m "Fred"
echo "End"

第二个文件(run-1.sh):

#!/usr/bin/env bash

echo "IN run-1"
while getopts m: flag; do
  case "${flag}" in
  m) MODE=${OPTARG} ;;
  esac
done
echo "before mode"
echo "$MODE"
echo "after mode"

输出:

./trigger.sh
Configuring tests
Source 1
IN run-1
before mode
George
after mode
Source 2
IN run-1
before mode
George
after mode
End

如果您查看执行trigger.sh 时的输出,您将看到第二个源调用不会将参数更新为“Fred”,而是将其保留为“George”。 这是什么原因呢?有使用

source
的解决方法吗?

linux shell
1个回答
0
投票

添加命令:

unset OPTIND

while getopts
循环之前。

© www.soinside.com 2019 - 2024. All rights reserved.