我不小心从脚本中获取了错误的环境。有什么方法可以“取消”它,或者换句话说,恢复它并恢复以前的环境吗?
当然,显而易见的答案是从干净的 shell 会话开始,但我很好奇是否还有其他解决方案。
更新:我只是指设置一些变量的脚本。
答案1
不,没有通用方法可以消除获取脚本(甚至“仅仅”执行脚本)的影响。这是存在不可逆命令(例如文件删除)这一事实的必然结果。如果您的脚本包含不可逆命令,那么获取该脚本的效果也将是不可逆的。
答案2
有什么方法可以“取消”它,或者换句话说,恢复它并恢复以前的环境吗?
不,一般来说没有自动的方式。
但我们不知道你source
写了什么。也许它很简单,足以撤销(例如,只是改变你的事情)PATH
来自以前众所周知的)。
答案3
如果你提前知道如果您想要执行此操作,可以source
在子 shell 中执行该命令,并通过退出该子 shell 来恢复其效果(只要它们的作用域是设置 shell 或环境变量)。
因此,如果您运行:
(source set-variables; run-command-with-variables); run-command-without-variables
...然后run-command-with-variables
将设置这些变量,但run-command-without-variables
不会。
还可以识别哪个外壳功能是通过检查与这些函数关联的元数据来获取脚本来设置的,这样理论上就可以编写一个 shell 函数或可源脚本来取消设置给定(参数化)文件中定义的所有其他函数。然而,对于非函数变量,没有存储允许它们被取消设置的信息(更不用说识别先前值)。