.bash_profile 中的别名不会反映在整个系统中

.bash_profile 中的别名不会反映在整个系统中

我在 .bash_profile 中几乎没有路径设置和别名,我正在导出它们。

例如:

alias gcc=/abc/def/......./myrtgcc
export gcc

我想用米尔特海湾合作委员会使用以下命令从终端或 Eclipse 编译 C 程序gcc;我希望系统能够运行myrtgcc somfile.c -o output

然而,这种情况并非如此。即使在添加上述别名.bash_profile并重新启动系统(或使用source .bash_profile)后,更改也不会反映出来:如果我打开终端并键入which gcc,我会得到/usr/bin/gcc,当 eclipse 使用“GCC”命令时,它会再次调用相同的命令/usr/bin/gcc

我该如何制作米尔特海湾合作委员会系统默认,用于命令海湾合作委员会

答案1

您对以下几件事感到困惑:

  1. which不反映别名。因此,当您尝试检查是否已创建别名时,使用which不会对您有帮助。alias改为不带参数运行;它将显示所有有效的别名。例子:

    anthony@Zia:~$ foo
    bash: foo: command not found
    anthony@Zia:~ [$?=127]$ alias foo='echo hi'
    anthony@Zia:~$ foo
    hi
    anthony@Zia:~$ which foo
    anthony@Zia:~ [$?=1]$
    
  2. 别名影响 shell,而不是其他东西。当makeeclipse等尝试运行时gcc,shell 别名并不重要。您也只能导出变量,而不能导出别名。下面是一个 perl 尝试运行它的示例(同样使用 foo 别名):

    anthony@Zia:~$ perl -Mautodie=system -E 'system("foo")'
    "foo" failed to start: "No such file or directory" at (eval 6) line 12.
    at -e line 1
    
  3. 大多数编译的东西运行ccc++等等,而不是gcc。因此,即使您重写了gcc,它也可能不起作用。

那么,如何实现这一点呢?

最好的方法是告诉make等使用哪个编译器:

make CC=/path/to/myrtgcc target

/.configure您还可以在运行使用 autoconf 的程序时在环境中传递它。

第二种方法是创建名为gcccc等的简单 shell 脚本(例如),~/bin并将其放在路径的第一个位置。脚本看起来像这样:

#!/bin/sh
exec /path/to/myrtgcc "$@"

你可以在你的 PATH 中使用类似的东西将它们放在第一位.bashrc

PATH="$HOME/bin:$PATH"
export PATH

答案2

阅读你的 shell 文档。有两种类型的配置文件。 .bash_profile 在您已经登录并执行某些操作(例如打开新终端)时执行。另一种类型的配置文件是在您最初登录系统时使用的,奇怪的是,它被称为登录配置文件。为了做你想做的事,尝试将你的东西放入 .profile 中

相关内容