为什么`make make`和`make`仅在TMUX内部运行不同的make?

时间:2019-05-20 08:40:14

标签: bash shell makefile gnu-make tmux

我有一个很奇怪的问题,只发生在tmux内部。 在MacBook上,我在{p> 1处安装了库存make

$> /usr/bin/make --version
GNU Make 3.81
Copyright (C) 2006  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.

This program built for i386-apple-darwin11.3.0

使用自制软件,我还brew install编辑了make,现在在自己的路径中有gmake

$> /usr/local/bin/gmake --version
GNU Make 4.2.1
Built for x86_64-apple-darwin18.2.0
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

以上路径是自制酒窖中gmake的符号链接。 自制安装程序附带一个/usr/local/opt/make/libexec/gnubin/make符号链接,该符号链接指向相同的二进制文件。

运行which make时,我期望得到的是/usr/bin/make,因为这是我键入make时执行的结果。但是:

$> which make
/usr/local/opt/make/libexec/gnubin/make

是前面提到的地窖符号链接。

所以我的问题是:为什么make --version打印的内容与

不同
`which make` --version

为什么只在tmux内发生而不是在普通的bash shell中发生?

更新:如here所述,tmux运行一个登录shell,导致执行path_helper,该混乱与PATH交织在一起。添加

if [ -f /etc/profile ]; then
    PATH=""
    source /etc/profile
fi
~/.profile

解决了该问题,尽管我不明白为什么在这两种情况下/usr/local/opt/make/libexec/gnubin都位于PATH的首位。

0 个答案:

没有答案