我在bash source somescript.sh
中提供了一个脚本。是否可以在不重新启动终端的情况下撤消此操作?或者,有没有办法将shell“重置”为登录时获得的设置而不重新启动?
编辑:正如其中一个答案中所建议的,我的脚本设置了一些环境变量。有没有办法重置为默认登录环境?
答案 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