运行存储在变量中的bash脚本

运行存储在变量中的bash脚本,bash,sh,Bash,Sh,我想将一个bash脚本的路径作为参数发送给另一个bash脚本来运行它并使用环境变量。如果我对bash脚本的路径进行硬编码以运行它,并且我可以在主脚本中检索环境变量,那么它在没有参数的情况下工作得很好。当我将路径作为参数发送时,问题就出现了,因为它不想运行它。 例如,如果路径是/path/script.bash,并且我将路径作为参数发送,那么我会得到/path/env_set:没有这样的文件或目录的错误 我按这一行运行脚本 . $1 (this doesn't work) . /path/scri

我想将一个bash脚本的路径作为参数发送给另一个bash脚本来运行它并使用环境变量。如果我对bash脚本的路径进行硬编码以运行它,并且我可以在主脚本中检索环境变量,那么它在没有参数的情况下工作得很好。当我将路径作为参数发送时,问题就出现了,因为它不想运行它。 例如,如果路径是/path/script.bash,并且我将路径作为参数发送,那么我会得到/path/env_set:没有这样的文件或目录的错误 我按这一行运行脚本

. $1 (this doesn't work)
. /path/script.bash (this works)
如果我使用

bash -c $1 
bash文件会运行,但不会设置环境变量以在主脚本中使用它


我不知道为什么在使用参数时env_set会替换脚本名。是否有任何方法可以实现这一点或任何解决方案来实现我的目标?

在脚本1的主代码中,您可以调用并运行脚本2,
/脚本2

第一个。表示当前shell,第二个为。用于当前目录

这将为您创建环境变量,并在同一终端中配置任何其他设置。
之后,当脚本2完成运行时,脚本1将继续运行,脚本2中创建的环境变量将可供脚本1在同一会话中使用。

听起来问题可能与引用有关,也可能与相对路径有关

引用不仅仅涉及空格,还涉及路径名扩展(即
[]?*
字符)

(不是
$1

请记住,如果要为环境脚本提供相对路径(或者该脚本使用一些相对路径),则会出现问题。这些路径是相对于
pwd
——执行主脚本时,您恰好位于该位置(例如,不是任何脚本文件本身所在的位置)

最后,您可以通过在开始时抛出
echo
并运行脚本(如果这样做安全的话)来调试此问题: 回声。"$1" 退出#如果不想在没有VAR的情况下运行,请在此处添加退出。
现在,您可以看到您实际想要获取的源代码。

我测试了
$1
在我的计算机上的bash中,它按预期运行。我建议您在
“$1”
周围加上双引号,以防脚本路径包含空格。您应该告诉我们:什么是
env_set
,并显示更多的代码。像往常一样,尝试制作一个最小的可复制示例。此外,在脚本开头放置
set-x
,以获取执行跟踪可能有助于澄清发生了什么。
. "$1"