将尚未安装在系统上的内容添加到 PATH 变量是否有任何潜在的负面影响?

Zol*_*ing 8 zsh path

我已将 LaTeX 添加到 PATH 变量,但当我将 shell 配置传输到多台计算机时,并非所有计算机上都安装了 LaTeX。除了无法访问软件的明显后果之外,当系统上不存在 PATH 变量所引用的软件时,配置 PATH 变量是否还会产生任何其他负面影响?

我的 .zshenv 文件:

# TeX Live
export PATH=$PATH:/usr/local/texlive/2023/bin/x86_64-linux
Run Code Online (Sandbox Code Playgroud)

Art*_*nov 13

没有任何。您的 shell 将花费大约 0.00005 秒尝试打开此位置,失败并继续。

如果此位置位于无法访问的远程文件系统上,则可能会出现唯一真正可能的问题。这可能会导致您每次尝试自动完成命令时出现一分钟的长时间延迟。


Z0O*_*0OM 3

这可能会产生一些潜在的负面影响,但实际上并不显着。

  1. 每当您尝试运行依赖于所添加目录中的软件但未安装的命令时,您可能会收到错误消息,指示找不到该命令或可执行文件。

  2. 如果添加的目录中的命令或可执行文件名称与系统上的现有命令冲突,则可能会导致意外行为。

  3. 当 shell 遇到命令时,它会在PATH变量列出的目录中搜索该命令。如果您引用的软件未安装,则 shell 必须在PATH确定该命令不可用之前搜索所有目录。这个额外的搜索时间可能会导致命令执行略有延迟。

您可以添加一条if语句来在执行导出之前检查软件是否存在。

如果要将 shell 配置传输到多台计算机,您可以考虑为每台计算机创建单独的配置文件,并PATH根据每个系统上可用的软件相应地自定义变量。

或者在 shell 配置中包含额外的检查,以验证是否存在所需的软件或目录。

  • 无论有或没有自定义“PATH”,第一颗子弹都会发生,不是吗?*或者在 shell 配置中包含额外的检查,以验证所需软件或目录是否存在。* 就像仅在目录存在时才将目录添加到“PATH”? (4认同)
  • #3 应该不是一个严重的问题。搜索不存在的目录的时间可以忽略不计——它只是在尝试打开该目录时收到错误并跳过它。而且 shell 会保存命令位置的缓存,因此通常不需要搜索。 (3认同)
  • #2 没有意义——该目录不存在,那么它怎么会产生冲突呢? (2认同)
  • @Barmar我认为#2的要点是:如果您使用自定义`PATH`用`/opt/custom/xyz`“覆盖”二进制`/usr/bin/xyz`,那么在没有`的机器上xyz` 根本上你只会得到一个“命令未找到”错误,但是在具有标准“/usr/bin/xyz”但*不是*“/opt/custom/xyz”的机器上,那么你最终可能会得到意外地运行一个程序并调用另一个程序。其后果可能是完全没有任何结果,到明显的错误,再到静默且不可恢复的数据丢失;取决于我们正在讨论的具体程序以及场景的设计程度。 (2认同)
  • @Barmar很可能是的,但这是一个解决在另一台没有安装所有这些软件包的机器上使用一台机器上的路径的潜在负面影响的答案。值得一提的是。如果答案涉及与其他类似但不完全相同的情况相关的事情,那么它对其他用户更有用。 (2认同)