我想从bash脚本中生成一个bash子shell,它允许我初始化环境变量并做一些尝试,这样当脚本结束时,用户在子shell中使用初始化的环境变量。
通过测试,我发现如果我在脚本中有指令 / bin / bash ,则会生成子shell,并且当脚本结束时用户位于子shell中。如果我执行exit,则子shell终止,用户返回到父shell。
我现在希望能够初始化环境变量,并根据脚本中给出的参数在子shell中执行一些任务。
我怎么能实现这一目标?
答案 0 :(得分:4)
$ 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