如何从脚本结束后保留的bash脚本生成bash子shell

如何从脚本结束后保留的bash脚本生成bash子shell,bash,Bash,我想从一个bash脚本中生成一个bash子shell,它允许我初始化环境变量并进行一些测试,这样当脚本结束时,用户就可以使用初始化的环境变量在子shell中 通过测试,我发现如果脚本中有指令/bin/bash,那么子shell就会生成,脚本结束时用户就在子shell中。如果执行exit,子shell终止,用户返回父shell 我现在希望能够初始化环境变量,并根据脚本中给出的参数在子shell中执行一些任务 我怎样才能做到这一点 导出脚本中的所有环境变量,然后生成子shell。 子shell将设置

我想从一个bash脚本中生成一个bash子shell,它允许我初始化环境变量并进行一些测试,这样当脚本结束时,用户就可以使用初始化的环境变量在子shell中

通过测试,我发现如果脚本中有指令/bin/bash,那么子shell就会生成,脚本结束时用户就在子shell中。如果执行exit,子shell终止,用户返回父shell

我现在希望能够初始化环境变量,并根据脚本中给出的参数在子shell中执行一些任务


我怎样才能做到这一点

导出脚本中的所有环境变量,然后生成子shell。 子shell将设置所有环境变量

export EXAMPLE="<value>"
...
#spawn a subshell
/bin/bash
export-EXAMPLE=“”
...
#产生一个次壳层
/bin/bash
就是您要找的

$ cat reshell.sh
#!/bin/bash
export MY_ENVIRONMENT=foo
chdir /home/bar
exec $SHELL
其中,
exec
将当前运行的脚本替换为继承脚本环境的新shell。这仍然是一个从属于你运行它的外壳,但是它只有一层深;例如:

$ pwd 
/home/chmike
$ ./reshell.sh
$ pwd
/home/bar
$ exit
$ pwd
/home/chmike

使用
exec$SHELL
而不是
exec/bin/bash
允许脚本调用用户首选的SHELL,以防它不是bash。

这正是我想要避免的。我不想让父shell与环境变量混在一起,我还需要执行一些脚本。将初始化脚本作为--init file参数调用就可以了。