Posts Mac 中使用 GNU 命令
Post
Cancel

Mac 中使用 GNU 命令

macOS 的自带命令行工具是 BSD 风格的,想在 Mac 上开发可以完美在 GNU/Linux 上运行的 bash 脚本,必须依赖 Linux 服务器,或者本地 Linux VM 去测试脚本,甚是麻烦,所以替换 BSD 命令为 GNU 命令,显得意义非凡,能把 Mac 当做 Linux 机器来使,想起来就兴奋。

安装 GNU 命令工具

所需的 GNU 命令工具,通过Homebrew安装,常用命令安装如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ brew install coreutils
$ brew install findutils
$ brew install gnu-sed
$ brew install gnu-indent
$ brew install gnu-tar
$ brew install gnu-which
$ brew install gnutls
$ brew install grep
$ brew install gzip
$ brew install screen
$ brew install watch
$ brew install wdiff --with-gettext
$ brew install wget
$ brew install less
$ brew install unzip

若要搜索所有 GNU 工具,可以通过以下命令搜索:

1
$ brew search gnu

覆盖系统自带命令

通过Homebrew安装的命令工具,默认安装在/usr/local/opt/,而系统自带 BSD 工具路径为/usr/bin/。当安装的 GNU 命令与系统自带命令重复时,用前缀g可以指定使用 GNU 版本,如:

1
2
3
$ gsed # GNU 版本(gnu-sed)

$ sed  # 系统 BSD 版

如果想省去g前缀,在环境变量PATH中把 GNU 工具的执行路径放置于/usr/bin之前即可,原理就是在系统扫描可执行路径时,会使用第一个符合条件的值。在~/.bash_profile添加对应路径到环境变量PATH(其实在$ brew install的时候,输出日志就有指示):

1
$ export PATH="/usr/local/opt/<PACKAGE>/libexec/gnubin:$PATH"

其中PACKAGE为工具包名称。在前文“安装 GNU 命令工具”安装的命令行工具,可添加如下环境变量实现对系统自带工具的覆盖:

1
2
3
4
5
6
7
8
9
export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/binutils/bin:$PATH"
export PATH="/usr/local/opt/ed/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/findutils/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/gnu-indent/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/gnu-which/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/grep/libexec/gnubin:$PATH"

刷新使其生效:

1
$ source ~/.bash_profile

现在,Mac 可以当作是换皮 Linux 来享用了。

参考资料

OLDER POST NEWER POST

Comments powered by Disqus.

Search Results