我想从 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。
关于bash - 如何从脚本结束后仍然存在的 bash 脚本生成 bash 子 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15383497/