我想从bash脚本中产生一个bash子shell,该脚本允许我初始化环境变量并执行一些操作,以便在脚本结束用户时位于具有初始化环境变量的子shell中。如何从脚本结束后保留的bash脚本产生bash子shell
通过测试,我发现如果脚本中有指令/bin/bash,子脚本就会生成,并且脚本结束时用户在子shell中。如果我执行退出,子shell将终止,并且用户返回到父shell。
我现在希望能够初始化环境变量,并根据脚本中给出的参数在子shell中执行一些任务。
我怎么能做到这一点?
我想从bash脚本中产生一个bash子shell,该脚本允许我初始化环境变量并执行一些操作,以便在脚本结束用户时位于具有初始化环境变量的子shell中。如何从脚本结束后保留的bash脚本产生bash子shell
通过测试,我发现如果脚本中有指令/bin/bash,子脚本就会生成,并且脚本结束时用户在子shell中。如果我执行退出,子shell将终止,并且用户返回到父shell。
我现在希望能够初始化环境变量,并根据脚本中给出的参数在子shell中执行一些任务。
我怎么能做到这一点?
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
允许脚本调用用户的优选壳的情况下,它不抨击。
导出脚本中的所有环境变量,然后生成一个子shell。 子壳将设置所有的环境变量。
export EXAMPLE="<value>"
...
#spawn a subshell
/bin/bash
这正是我想避免的。我不想混淆环境变量的父shell,我也需要执行一些脚本。调用初始化脚本作为--init-file参数可以做到这一点。 – chmike 2013-03-13 11:21:45