如何获得与父 shell 具有完全相同当前环境的交互式 Bash 子 shell?

如何获得与父 shell 具有完全相同当前环境的交互式 Bash 子 shell?

我想为自己和许多其他用户创建一个脚本,它将配置使用特定版本工具集的环境……然后使用该环境打开一个交互式 shell。

似乎正在发生的事情是,各种用户初始化脚本(~/.bashrc)被执行并且破坏了部分设置。

许多用户(包括我自己)在他们的~/.bashrc...中配置了工具的默认版本,并希望保持这种状态。

我为其编写的该脚本的替代版本仅在一小部分时间内使用。

我尝试了以下方法:

setup the environment
bash
      # runs ~/.bashrc and breaks the setup

bash -i
      # runs ~/.bashrc and breaks the setup

bash --rcfile <(echo echo in subshell... $PATH)
      the displayed $PATH is correct - but I immediately return
      to the parent (no longer a subshell - not interactive)

bash --rcfile -i <echo echo in subshell... $PATH)
      the displayed $PATH is correct - but I immediately return
      to the parent (not a subshell)

我们不想。source我已经可以做到这一点的文件:我们希望能够exit回到以前的环境。

那么... 我如何才能获得一个与父 shell 具有完全相同当前环境的交互式 Bash 子 shell?

无论如何,我希望它能在 RedHat 和 Ubuntu 环境上运行。

答案1

bash --norc -i

--norc
不要~/.bashrc在交互式 shell 中读取初始化文件。[…]

有一个类似的选项(但对于非登录 shell,您不需要它):

--noprofile
不要加载系统范围的启动文件/etc/profile或任何个人初始化文件~/.bash_profile、,~/.bash_login或者~/.profile当 Bash 作为登录 shell 调用时。

来源

如果调用bash是你的脚本做的最后一件事,你可以exec这样做:

exec bash --norc -i

相关内容