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