如何从脚本结束后持久存在的bash脚本中生成bash子shell

时间:2013-03-13 11:04:45

标签: bash

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

通过测试,我发现如果我在脚本中有指令 / bin / bash ,则会生成子shell,并且当脚本结束时用户位于子shell中。如果我执行exit,则子shell终止,用户返回到父shell。

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

我怎么能实现这一目标?

2 个答案:

答案 0 :(得分:4)

你正在寻找

exec

$ cat reshell.sh
#!/bin/bash
export MY_ENVIRONMENT=foo
chdir /home/bar
exec $SHELL

其中exec用继承了脚本环境的新shell替换当前运行的脚本。这仍然是你运行它的一个从属shell,但它只有一层深;例如:

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

使用exec $SHELL而不是exec /bin/bash允许脚本在不是bash的情况下调用用户的首选shell。

答案 1 :(得分:0)

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

export EXAMPLE="<value>"
...
#spawn a subshell
/bin/bash