使用 Linux 版本的命令而不是 BSD 版本

使用 Linux 版本的命令而不是 BSD 版本

我有一个来自旧笔记本电脑的实用程序 bash 脚本,我试图在我当前的笔记本电脑上使用它。它失败是因为它将未知选项传递给column命令。运行man column,我看到这台机器正在使用BSD版本命令的;该脚本是为Linux版本,有更多的选择。

我无法访问旧机器,所以我不能说太多关于如何设置它的信息,除了它应该是非常相似到新的。当前机器运行的是最近几天新安装的 Pop!OS 20.04。

是否有明显正确的方法来指定我要使用哪些类似的命令?

答案1

是否有明显正确的方法来指定我要使用哪些类似的命令?

冒着一点点的风险显然,一种明显的方法是指定您希望脚本使用的确切可执行文件的完整路径:

#!/usr/bin/env bash

# use the col executable in /usr/bin, not that other one:
col='/usr/bin/col'

$col ... ... ...

正如 @muru 指出的,另一种方法是声明一个函数col()来调用您希望使用的特定二进制文件:

#!/usr/bin/env bash

# use the col executable in /usr/bin, not that other one:
col()
{
  /usr/bin/col "$@"
}

col ... ... ...

答案2

找到它们,例如type -a column,重新排列您的目录$PATH,使包含您想要的版本的目录位于包含您不想要的版本的目录之前。然后,发出rehash命令。

PATH编辑很棘手。永远不要做PATH=没有内容的作业$PATH,除非你真的确定自己在做什么。

我使用 Stephen Collyer 的 bash_path_funcs,早在 2000 年就在 Linux Journal 中进行了描述:

https://www.linuxjournal.com/article/3645 https://www.linuxjournal.com/article/376​​8 https://www.linuxjournal.com/article/3935

addpath仅当路径中最初不存在该条目时,该函数才会将其添加到路径中。delpath -n从路径中删除所有不存在的目录。

您可以pathfunc.tgz从以下位置获取该文件 https://web.archive.org/web/20061210054813/http://www.netspinner.co.uk:80/Downloads/pathfunc.tgz

相关内容