我在bash中发了一个脚本source somescript.sh
.是否可以在不重新启动终端的情况下撤消此操作?或者,有没有办法将shell"重置"为登录时获得的设置而无需重新启动?
编辑:正如其中一个答案中所建议的,我的脚本设置了一些环境变量.有没有办法重置为默认登录环境?
Wil*_*ell 23
简单地重新执行shell通常就足够了:
$ exec bash
这不能保证撤消任何内容(获取脚本可能会删除文件,或执行任何任意命令),但如果您的安装脚本写得很好,您将获得一个相对干净的环境.你也可以尝试:
$ su - $(whoami)
请注意,这两个解决方案都假设您正在讨论重置当前shell,而不是您的终端(问题中所述).如果要重置终端,请尝试
$ reset
Cel*_*ada 11
不.采购脚本执行其中包含的命令.无法保证脚本不会执行无法撤消的操作(例如删除文件或其他内容).
如果脚本只设置了一些变量和/或运行了一些无害的命令,那么你可以通过取消设置相同的变量来"撤销"它的动作,但即使这样,脚本也可能已经用新的变量替换了已经具有值的变量,并且撤消了它你必须记住旧的价值观.
如果您获取为您的环境设置一些变量的脚本,但您希望它是可撤消的,我建议您首先启动一个新的(子)shell并在子shell中获取脚本.然后将环境重置为之前的状态,只需退出子shell.
最好的选择似乎是用来unset
取消采购产生的环境变量.添加OLD_PATH=$PATH; export OLD_PATH
到.bashrc
配置文件会保存登录路径的备份,以防需要还原$PATH
.
我最喜欢的方法是在 () 括号内使用子 shell
#!/bin/bash
(
source some_script.sh
#do something
)
# the environment before starting previous subshell should be restored here
# ...
(
source other_script.sh
#do something else
)
# the environment before starting previous subshell should be restored here
Run Code Online (Sandbox Code Playgroud)
也可以看看