我以前没有使用过alternatives
,我可能做错了:我肯定没有得到我期望的结果。我需要使用两个版本的 GCC,并希望使用来设置它们alternatives
。以下是我所做的:
$ sudo alternatives --install /usr/bin/gcc gcc /opt/gcc4.6.3/bin/gcc 20000
$ sudo alternatives --config gcc
There is 1 program that provides 'gcc'.
Selection Command
-----------------------------------------------
*+ 1 /opt/gcc4.6.3/bin/gcc
Enter to keep the current selection[+], or type selection number: 1
$ which gcc
/usr/lib64/ccache/gcc
发生了什么事?为什么 gcc 仍然是安装在其他地方的那个?为什么这个(无论我选择什么,它都会因为某种原因被选中)甚至没有被列为替代方案?
如果重要的话,我正在使用 Fedora 17。
答案1
你的命令基本上是:
替代方案--安装/usr/bin/gccgcc /opt/gcc4.6.3/bin/gcc
这意味着替代系统将调整 /usr/bin/gcc 符号链接以指向 /opt 或其他地方的正确二进制文件。
这样做不会改变您在和类似命令中看到的路径which
仅搜索gcc
$PATH 中名为的二进制文件,而替代系统实际上不可能动态改变已经运行的 shell 的 $PATH。
另外,您还有缓存安装,这意味着 ccache 包装器脚本目录放在通常的 /usr/bin 之前的 $PATH 中,因此which
将始终输出包装器脚本的路径。(脚本运行时将gcc
再次使用相同的 $PATH 搜索实际路径。)