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

标签 bash

我想从 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/

相关文章:

php - 使用 curl 执行一个 php 文件

linux - 将两个 greps 和 awk 应用于相同的输入

python - 当父 Bash shell 脚本被杀死时停止执行 python 脚本

bash - 为什么 `ack` 像这样与 `bash` 一起使用时不产生输出?

python - Systemd 看门狗通过脚本运行程序

带有提示的 Linux 命令行问题

bash - 使用 Imagemagick 切掉图像的 4 个边

linux - linux下从文本文件中提取信息

linux - 使用 bash 读取上一行

bash - ffmpeg - 无效的持续时间