3

我想从一个 bash 脚本中生成一个 bash 子shell,它允许我初始化环境变量并进行一些尝试,以便当脚本结束时,用户在具有初始化环境变量的子shell中。

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

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

我怎么能做到这一点?

4

2 回答 2

4

exec是你要找的

$ 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。

于 2013-03-13T11:20:19.557 回答
0

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

export EXAMPLE="<value>"
...
#spawn a subshell
/bin/bash
于 2013-03-13T11:14:44.267 回答