如何从 bash 脚本生成 bash 子 shell,该子 shell 在脚本结束后仍然存在

chm*_*ike 3 bash

我想从 bash 脚本生成一个 bash 子 shell,它允许我初始化环境变量并执行一些操作,以便当脚本结束时,用户位于具有初始化环境变量的子 shell 中。

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

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

我怎样才能做到这一点?

msw*_*msw 5

exec是你正在寻找的

$ cat reshell.sh
#!/bin/bash
export MY_ENVIRONMENT=foo
chdir /home/bar
exec $SHELL
Run Code Online (Sandbox Code Playgroud)

其中,将exec当前运行的脚本替换为继承了脚本环境的新 shell。这仍然是您运行它的 shell 的下级 shell,但它只有一层深;例如:

$ pwd 
/home/chmike
$ ./reshell.sh
$ pwd
/home/bar
$ exit
$ pwd
/home/chmike
Run Code Online (Sandbox Code Playgroud)

使用exec $SHELL代替exec /bin/bash允许脚本调用用户首选的 shell(如果它不是 bash)。