我想从 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
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)。
| 归档时间: |
|
| 查看次数: |
4392 次 |
| 最近记录: |