是否可以在bash中“取消资源”?

时间:2012-01-06 15:51:41

标签: bash

我在bash source somescript.sh中提供了一个脚本。是否可以在不重新启动终端的情况下撤消此操作?或者,有没有办法将shell“重置”为登录时获得的设置而不重新启动?

编辑:正如其中一个答案中所建议的,我的脚本设置了一些环境变量。有没有办法重置为默认登录环境?

6 个答案:

答案 0 :(得分:20)

简单地重新执行shell通常就足够了:

$ exec bash

无法保证撤消任何内容(获取脚本可能会删除文件或执行任意命令),但如果您的安装脚本写得很好,您将获得相对干净的环境。您也可以尝试:

$ su - $(whoami)

请注意,这两个解决方案都假设您正在讨论重置当前shell,而不是您的终端(问题中所述)。如果要重置终端,请尝试

$ reset

答案 1 :(得分:11)

没有。采购脚本执行其中包含的命令。无法保证脚本不会执行无法撤消的操作(例如删除文件或其他内容)。

如果脚本只设置一些变量和/或运行一些无害的命令,那么你可以通过取消设置相同的变量来“撤消”它的动作,但即使这样,脚本也可能已经替换了已经变量的变量以前有新的价值观,要取消它,你必须记住旧的价值观。

如果您提供的脚本为您的环境设置了一些变量,但您希望它是可撤消的,我建议您首先启动一个新的(子)shell并在子shell中获取脚本。然后将环境重置为之前的状态,只需退出子shell。

答案 2 :(得分:7)

最好的选择似乎是使用unset取消设置采购产生的环境变量。将OLD_PATH=$PATH; export OLD_PATH添加到.bashrc配置文件可以保存登录路径的备份,以防需要还原$PATH

答案 3 :(得分:6)

不是最优雅的解决方案,但这似乎可以满足您的需求:

exec $SHELL -l

答案 4 :(得分:0)

我不认为在bash中可以撤消已执行的命令。您可以尝试tset, reset进行终端初始化。

答案 5 :(得分:0)

根据您的采购来源,您可以让此脚本自行来源/取消来源。

#!/bin/bash

if [ "$IS_SOURCED" == true ] ; then
  unset -f foo
  export IS_SOURCED==false
else
  foo () { echo bar ; }
  export IS_SOURCED==true
fi