通过设置 PATH 来破坏 Debian 上的命令

通过设置 PATH 来破坏 Debian 上的命令

我现在遇到一个相当大的问题,我尝试设置 python 文件的 PATH,但是我做错了,似乎破坏了 debian 上的每个命令。

当我输入任何命令时我得到的结果:

-bash: "command": No such file or directory

我认为这可能是因为我输入了“PATH=”,而等号后没有任何内容。我该如何重置它?

答案1

如果您在图形 X 会话中执行此操作(很可能),您只需关闭终端窗口并打开一个新窗口即可。由于对 $PATH 的更改不会提升到父进程,因此新的终端会话将从它是父进程,bash 将从磁盘上的配置中应用任何进一步的定制。

如果你没有在 X 会话中运行,那么最简单的解决办法可能就是注销并重新登录。除非您对 bashrc 或 bash 配置文件进行了更改,否则这会将您的 $PATH 重置为其正常值。

如果由于某种原因您无法注销,您可以在 bash 提示符下按Ctrl+C告诉 shell 忽略当前命令行上的任何输入,然后按Ctrl+ D。后者向 shell 发送文件结束信号,导致其退出。如果您的登录 shell 退出,您将返回到登录提示符并可以重新登录。

如果你没有运行 X 并且现在无法注销然后您可以启动一个新的登录 shell,它将设置自己的环境副本,包括 $PATH。如果您正在做某事,并且想要到达可以干净退出然后继续的点,这可能会很有用。为此,您需要使用--login(或-l) 参数运行 bash。由于 bash 不在您的 $PATH 中,因此您需要指定它的完整路径。幸运的是,这非常简单,因为几乎每个安装了 bash 的现代系统都会在 /bin/bash 中使用它,所以我们知道在哪里查找。

  • 首次运行exec /bin/bash --login。这将用新的 shell 替换您当前的 shell,该 shell 具有基本正确的环境。但是,您的 bash 启动脚本可能依赖于由于 $PATH 为空而不可用的内容。如果是这种情况,它们很可能会打印一些(或许多)错误。
  • 为了解决这个问题,只需exec /bin/bash --login 再次。这应该在正确设置了 $PATH 的环境中执行,这样 bash 启动脚本才能运行所需的内容。结果将是一个正确设置的 shell 实例。

你真的不需要使用exec,但它在这里很方便,因为它会导致你现有的shell被取代而不是简单地将新实例作为子进程启动。如果在这种情况下不使用 exec,则退出最近启动的 shell 时,您将回到损坏的实例。

相关内容