如何使 GNU grep 成为 FreeBSD 中的默认值?

如何使 GNU grep 成为 FreeBSD 中的默认值?

我正在运行 FreeBSD 9.1-RELEASE。我已经安装了 GNU grep 和portmaster textproc/gnugrep.

然而,用户的“默认”grep 仍然是 FreeBSD grep。

# /usr/local/bin/grep -V
/usr/local/bin/grep (GNU grep) 2.12

# grep -V
grep (GNU grep) 2.5.1-FreeBSD

我想将 GNU grep 设置为默认。我知道问题出在我的PATH环境变量中指定的目录顺序:

# echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin

但是,我害怕将/usr/local/bin条目移至我的PATH.安全吗?

在像 Debian 这样的 Linux 发行版中,此类任务通常通过dpkg-divert和/或来完成update-alternatives

在 FreeBSD 中做我想做的事情而不破坏系统升级等的最佳方法是什么?

答案1

更新:请注意,此答案来自 2013 年,它适用于 FreeBSD 8.x 及更早版本。 ABSD grep被添加到修订版 222273并出现在 FreeBSD-9.0 中(奇怪的是,通常全面的发行说明中缺少更改:谷歌搜索)。功能齐全的 GNU grep 仍然是可在 ports 集合中找到


自由BSDgrep 曾是GNU grep,尽管很旧并且应用了一些补丁:

# which grep 
/usr/bin/grep

# /usr/bin/grep -V
grep (GNU grep) 2.5.1-FreeBSD

Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

它有少量补丁(大部分来自 Fedora Linux),如果您已经/usr/src/安装了这些补丁,请参阅/usr/src/gnu/usr.bin/grep/FREEBSD-upgrade.

如果您在端口版本(2.12 与 2.5.1)中需要特定的东西,则有许多错误修复、速度改进和 PCRE 支持(-P在系统版本中未启用),重新排序应该是非常安全的PATH/usr/local/bin这是我通常做什么。 (最好的做法是su -正确设置 root 的环境,尽管在 FreeBSD 上默认~root/.cshrc设置是PATH明确的。)

否则,请检查您的 shell 手册页并根据需要进行设置alias,但这实际上仅用于交互使用,shell 脚本或 Makefiles 不会观察它。

答案2

只需创建一个别名,在 bash 中添加到您的~/.bash_profile

alias grep /usr/local/bin/grep

(我相信其他 shell 也可以做类似的事情。)这样您就可以挑选单个可执行文件。gnugrep如果您不想失去系统别名,甚至可以调用您的别名。

答案3

仅将 grep 移至路径开头。

  • 建立一个目录mkdir /override/bin
  • 将符号链接放在此目录ln -s /usr/local/bin/grep /override/bin/或更好的目录中(如果您有 gnu ln)ln -s -t /override/bin/ /usr/local/bin/grep(减少错误的追逐)。
  • 添加/override/bin/到路径的开头。

答案4

如果您不想更改 ${PATH},也可以grep从早期输入的 ${PATH} 值链接到您喜欢的路径。

例如,/bin您的 ${PATH} 的第二个条目及其可能在所有用户的 ${PATH} 值中。

所以你可以以 root 身份执行此操作:

cd /bin
ln -s /usr/local/bin/grep

相关内容