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

Ben*_*min 34 bash

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

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

Wil*_*ell 23

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

$ exec bash

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

$ su - $(whoami)

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

$ reset


Cel*_*ada 11

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

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

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


Ben*_*min 7

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


gre*_*nix 7

我最喜欢的方法是在 () 括号内使用子 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)

也可以看看

https://unix.stackexchange.com/questions/138463/do-parentheses-really-put-the-command-in-a-subshel​​l


Cor*_*son 6

不是最优雅的解决方案,但这似乎做你想要的:

exec $SHELL -l
Run Code Online (Sandbox Code Playgroud)