为什么没有列出/应用所有替代方案?

为什么没有列出/应用所有替代方案?

我以前没有使用过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 搜索实际路径。)

相关内容