2013-03-13 121 views
1

我想从bash脚本中产生一个bash子shell,该脚本允许我初始化环境变量并执行一些操作,以便在脚本结束用户时位于具有初始化环境变量的子shell中。如何从脚本结束后保留​​的bash脚本产生bash子shell

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

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

我怎么能做到这一点?

回答

4

exec是你在找什么

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

其中exec与继承的脚本环境的新外壳替换当前正在运行的脚本。这对于你从中跑出来的那个仍然是一个附属的外壳,但它将只有一层;例如:

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

exec $SHELL使用代替exec /bin/bash允许脚本调用用户的优选壳的情况下,它不抨击。

0

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

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

这正是我想避免的。我不想混淆环境变量的父shell,我也需要执行一些脚本。调用初始化脚本作为--init-file参数可以做到这一点。 – chmike 2013-03-13 11:21:45