.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. エイリアスはシェルに影響し、他のものには影響しません。 、 などが を実行しようとする場合makeeclipseシェルgccエイリアスは関係ありません。また、エクスポートできるのは変数のみで、エイリアスはエクスポートできません。以下は、 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

autoconf を使用するプログラムを実行するときに、それを環境に渡すこともできます/.configure

2 番目の方法は、(たとえば) に 、 などgccという単純なシェル スクリプトを作成し、それをパスの先頭に配置することです。スクリプトは次のようになります。cc~/bin

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

そして、次のようにして PATH の先頭に配置します.bashrc

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

答え2

シェルのドキュメントを読んでください。プロファイルには 2 つの種類があります。.bash_profile は、すでにログインしていて、新しいターミナルを開くなどの操作を行うときに実行されます。もう 1 つの種類のプロファイルは、システムに最初にログインするときに使用され、奇妙なことに、ログイン プロファイルと呼ばれます。目的のことをするには、.profile に必要なものを入れてみてください。

関連情報