在我的PATH环境变量中包括任何用户定义的目录,或者将自定义脚本放在已经包含的目录中,我一直犹豫不决。
这样做的原因是,我不知道如何避免(不可否认)不太可能出现的边缘情况,即调用外部程序的二进制程序,该程序的名称恰好与我的自定义脚本之一相同,而机器上没有想要的二进制文件,因此程序实际上调用了我的自定义脚本,这只会导致麻烦。
这有点类似于用同名的自定义脚本来隐藏二进制文件,就像通常用包装器脚本完成的那样。但是,在这种情况下,所讨论的程序不存在于机器上(只有同名的自定义脚本),因此定制脚本位置在PATH变量中的位置也无关紧要。
除了在PATH变量中使用的目录中不存储自定义脚本之外,还有其他避免这种情况的方法吗?唯一可能出现在我脑海中的总是使用绝对路径来调用自定义脚本。
发布于 2018-02-10 16:18:48
三种解决办法:
$PATH。这将确保当您知道需要时调用您自己的脚本,并且您的脚本不会意外地“阴影”任何其他实用程序。$PATH的末尾,在包含第三方软件的标准目录和目录的路径之后。这样做的缺点是,如果您碰巧有一个与另一个实用程序同名的脚本,您将调用该实用程序而不是您自己的脚本。这是你所关心的相反的问题。.sh作为文件名后缀的系统实用程序很少(而且标准实用程序永远不会)。您还可以/或者考虑为您自己的脚本(wally-backup.sh或wally-getmail)建立一个“名称空间”,例如一个D10前缀。通常,您应该知道标准Unix实用程序的名称,并避免它们(例如,test是自定义实用程序的坏名称)。标准实用程序名称在这里有售的列表。同样,特殊内置实用程序的名称不应用于自定义脚本。这些都列在这个链接的末尾上。
如果您修改您的$PATH,请私下修改它,即仅针对您登录的非特权用户。不要在系统范围内修改它,除非您是多用户系统上的系统管理员,并且您的脚本实际上将被其他人使用(而且由于某种原因,他们修改自己的$PATH会很麻烦)。如果您修改您的系统的$PATH,绝对确保“隐藏问题”不会发生,或者基本的系统功能可能会受到损害,这取决于该$PATH的使用地点。
https://unix.stackexchange.com/questions/423242
复制相似问题