私の質問は別のオープンな質問に関連しています質問私のecho $PATHの出力は次のようになります
/home/sahil/.rvm/gems/ruby-1.9.3-p125/bin:/home/sahil/.rvm/gems/ruby-1.9.3-p125@global/bin:/home/sahil/.rvm/rubies/ruby-1.9.3-p125/bin:/home/sahil/.rvm/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/home/sahil/.rvm/bin{}:/home/android-sdks/{}:/home/android-sdks/platform-tools/{}:/home/android-sdks/tools/{}:/home/sahil/android-sdks/tools{}:/home/sahil/android-sdks/tools:/home/sahil/android-sdks/platform-tools/
しかし、走る
ifconfig
次のような出力が得られます
Command 'ifconfig' is available in '/sbin/ifconfig'
The command could not be located because '/sbin' is not included in the PATH environment variable.
This is most likely caused by the lack of administrative privileges associated with your user account.
ifconfig: command not found
他の質問で示されているようなコマンドを実行した後
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
それは走るifconfigただし、Ruby Rails または RVM の他のコマンドはブロックされます。
これを解決する方法について助けを求めています。また、なぜこれが起こるのでしょうか?
答え1
以下のコマンドを試してください
export PATH=$PATH:/usr/sbin
または(すべてのパスを設定する場合)
export PATH=$PATH:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/bin:/usr/games
答え2
あなたのオリジナル$PATH
(投稿した行はあまり読みにくいです):
/home/sahil/.rvm/gems/ruby-1.9.3-p125/bin:
/home/sahil/.rvm/gems/ruby-1.9.3-p125@global/bin:
/home/sahil/.rvm/rubies/ruby-1.9.3-p125/bin:/home/sahil/.rvm/bin:
/usr/local/bin:/usr/bin:/bin:/usr/games:
/home/sahil/.rvm/bin{}:
/home/android-sdks/{}:
/home/android-sdks/platform-tools/{}:
/home/android-sdks/tools/{}:
/home/sahil/android-sdks/tools{}:
/home/sahil/android-sdks/tools:
/home/sahil/android-sdks/platform-tools/
と があります。すでにお分かりのとおり、/usr/local/bin
はの中にあります。/usr/bin
/bin
ifconfig
/sbin
したがって、そのパスが設定されている場所にも含める必要があります/sbin
。
見るルビージェムこれを行う方法に関するドキュメント。
答え3
/sbinは通常、パスの一部です。Fedoraなどの他のディストリビューションでは、一般ユーザー向けにPATHに含まれていませんが、Ubuntuでは常に含まれていると思います。/etc/environmentファイルをチェックして、有効かどうか、また/sbinがパスに追加されているかどうかを確認することをお勧めします。/etc/environment を cat する次のような出力が得られます。
adnan@adnan-laptop:~$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
ご覧のように/sbinすでに PATH 環境変数の一部です。ファイルの内容が同じ場合は、権限を確認してください。そうでない場合は、このファイルの PATH に /sbin を追加してください。私の場合、権限は次のとおりです。
adnan@adnan-laptop:~$ ls -l /etc/environment
-rw-r--r-- 1 root root 79 2009-10-29 01:55 /etc/environment
答え4
変数は何ですかPATH
?
PATH
ディレクトリ パスのリストです。ユーザーがフル パスを指定せずにコマンドを入力すると、このリストにコマンドにつながるパスが含まれているかどうかがチェックされます。この変数内のパスの順序は、コマンドが検索される順序を示します。複数のディレクトリに同じ名前のプログラムがある場合は、リストの先頭 (左側) に最も近いフォルダーにあるプログラムが実行されます。
他のコマンド (Ruby Rails および RVM から) がブロックされた理由は、以下を実行したためです。
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
PATH
その結果、含まれていないこのようなプログラムのフォルダ、すなわち:
/home/sahil/.rvm/gems/ruby-1.9.3-p125/bin:/home/sahil/.rvm/gems/ruby-1.9.3-p125@global/bin:/home/sahil/.rvm/rubies/ruby-1.9.3-p125/bin:/home/sahil/.rvm/bin
/sbin
代わりに、独自の を追加する必要がありますPATH
。
/sbin
追加方法PATH
PATH
は基本的に常に環境内にあるため、エクスポートする必要はなく、/sbin
ディレクトリを追加するだけで済みます。これを行うには、bashで実行します。
PATH="$PATH:/sbin"
パスは次のようになります。
/home/sahil/.rvm/gems/ruby-1.9.3-p125/bin:/home/sahil/.rvm/gems/ruby-1.9.3-p125@global/bin:/home/sahil/.rvm/rubies/ruby-1.9.3-p125/bin:/home/sahil/.rvm/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/home/sahil/.rvm/bin{}:/home/android-sdks/{}:/home/android-sdks/platform-tools/{}:/home/android-sdks/tools/{}:/home/sahil/android-sdks/tools{}:/home/sahil/android-sdks/tools:/home/sahil/android-sdks/platform-tools/:/sbin
ただし、この変更は永続的ではありません。終了すると、現在のセッションがPATH
以前の値で再ロードされます。永続的にするには、この変更をファイルに追加する必要があります~/.profile
。これを行う方法の 1 つは次のようになります。
echo 'PATH="$PATH:/sbin"' >> ~/.profile
ここで、現在のシェルで「~/.profile」の内容を実行する必要があります。
source ~/.profile
準備は完了です。現在のシェルだけでなく、今後のすべてのセッションにPATH
ディレクトリが含まれるようになります。
なぜ ~/.bashrc ではなく ~/.profile を使用したのですか?
この概念はあなたにとって役に立つかもしれません:
~/.profile
ログイン時に起動するプログラム (グラフィカル プログラムは別ファイルに格納されます) や
環境変数の定義など、セッション全体に適用されるものを格納する場所です。
~/.bashrc
エイリアスや関数の定義、シェル オプション、プロンプト設定など、bash 自体にのみ適用されるものを置く場所です。(キー バインディングもここに置けますが、bash の場合は通常 ~/.inputrc に置きます。)
/sbin
あなたの にが必要ですかPATH
?
/sbin
デフォルトで含めるべきかどうかについては、ここでは議論しません。PATH
ここで議論してもあまり生産的な議論にはならない可能性があるからです。私が持っているものを、あなたが望むなら持っていてもいいです。あなたの判断で。