$PATH 指的是网络文件系统:通常有用,有时很糟糕

$PATH 指的是网络文件系统:通常有用,有时很糟糕

我运行的一些脚本位于另一台计算机上托管的 CIFS 文件系统上。我通过网络安装该文件系统并将脚本的远程位置添加到我的 $PATH 中。这在正常条件下效果很好。但是,如果远程计算机由于某种原因脱机或挂起,则可能会使使用命令行变得非常糟糕,因为每个选项卡完成或命令输入都会阻止在远程主机上查找程序。当 shell 启动时,打开新的终端窗口也会挂起。

在保持 $PATH 查找机制的实用性的同时,有什么好方法可以改善这个问题?

答案1

可能适合您的解决方法是在本地目录中创建一堆包装器脚本,并将其放入搜索路径而不是远程目录中。这不是万能药:每次远程目录的内容发生变化时,您都需要更新包装器。但这样,除非您正在执行该程序,否则无法访问远程文件。

您需要符号链接而不是包装脚本,因为完成有时会检查文件是否可执行,这意味着stat对文件的调用。但所有包装器都可以是单个可执行文件的符号链接。

  • 一劳永逸地创建一个本地目录和一个包含以下内容的~/remote-scripts可执行文件~/remote-scripts/.remote-wrapper

    #!/bin/sh
    exec "/remote/path/bin/${0##*/}" "$@"
    
  • 要更新~/remote-scripts,请运行以下代码片段:

    find ~/remote-scripts -type l -exec rm {} +
    for x in /remote/path/bin/*; do ln -s .remote-wrapper ~/remote-scripts/"${x##*/}"; done
    
  • 放入~/remote-scripts你的PATH.

相关内容