社区上个月审查了是否重新打开此问题并将其关闭:
原始关闭原因未解决
我正在尝试编写一个 shell 脚本,该脚本在运行时将设置一些环境变量,这些变量将保持在调用者的 shell 中。
setenv FOO foo
在 csh/tcsh 中,或
export FOO=foo
在 sh/bash 中仅在脚本执行期间设置它。
我已经知道了
source myscript
将运行脚本的命令而不是启动新的 shell,这可能会导致设置“调用者”环境。
但问题是:
我希望这个脚本可以从 bash 或 csh 调用。换句话说,我希望任一 shell 的用户都能够运行我的脚本并改变他们的 shell 环境。所以’source’对我不起作用,因为运行 csh 的用户无法获取 bash 脚本,而运行 bash 的用户无法获取 csh 脚本。
有没有不需要在脚本上编写和维护两个版本的合理解决方案?
您的 shell 进程拥有父进程环境的副本,并且无法访问父进程的环境。当您的 shell 进程终止时,您对其环境所做的任何更改都会丢失。获取脚本文件是配置 shell 环境最常用的方法,您可能只想硬着头皮为两种 shell 中的每一种维护一个。