试图运行一个bash脚本来源于另一个脚本运行的源代码

我有一个bash脚本,最终会调用另一个bash脚本。 每个脚本必须以“源代码”运行。 为了简单起见,我总结了下面的问题点

script1.sh

source script2.sh 

script2.sh

 export someVar=something 

运行一切:

 source script1.sh arg1 arg2 

问题是当script2.shscript1.sh运行时,参数也被复制,所以script2.sh实际上运行如下:

 source script2.sh arg1 arg2 

script2.sh失败,因为提供了这些参数。 有没有什么办法可以从脚本1运行script2而不传递这些参数 ? 运行script2而不使用source命令不是一个选项,除非有另外一种方法让它运行并让variables保持。 我也无法以任何方式修改script2。

你可以使用set --来清除位置参数set --当你完成它们时:

script1.sh

 echo "Number of parameters before: $#" set -- echo "Number of parameters after : $#" source script2.sh 

script2.sh

 echo "script2.sh received $# parameters" 

现在script1.sh foo bar会打印

 Number of parameters before: 2 Number of parameters after : 0 script2.sh received 0 parameters