我想从一个 bash 脚本中生成一个 bash 子shell,它允许我初始化环境变量并进行一些尝试,以便当脚本结束时,用户在具有初始化环境变量的子shell中。
通过测试,我发现如果脚本中有/bin/bash指令,则会生成子 shell,并且当脚本结束时用户位于子 shell 中。如果我执行 exit,则子 shell 终止,用户返回父 shell。
我现在希望能够初始化环境变量并根据脚本中给出的参数在子shell中执行一些任务。
我怎么能做到这一点?
我想从一个 bash 脚本中生成一个 bash 子shell,它允许我初始化环境变量并进行一些尝试,以便当脚本结束时,用户在具有初始化环境变量的子shell中。
通过测试,我发现如果脚本中有/bin/bash指令,则会生成子 shell,并且当脚本结束时用户位于子 shell 中。如果我执行 exit,则子 shell 终止,用户返回父 shell。
我现在希望能够初始化环境变量并根据脚本中给出的参数在子shell中执行一些任务。
我怎么能做到这一点?
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。
导出脚本中的所有环境变量,然后生成一个子shell。子shell 将设置所有环境变量。
export EXAMPLE="<value>"
...
#spawn a subshell
/bin/bash