PATHにさらにディレクトリを追加する方法

PATHにさらにディレクトリを追加する方法

さて、まず私はLinuxに初めて触れ、Linux Mintを使っています。

私(特に私のホームディレクトリ)にさらにディレクトリを追加するには、PATH同様のBashコマンドが必要であることを学びましたPATH=$PATH:~。そうですか?

$PATH問題はなぜそれをそこに入れなければならないのですか。システムパスを意味します。そうですか?ただ入力すると機能しますかPATH=~?私は、私のホームディレクトリを既存のディレクトリに追加したいという意味ですPATH

答え1

Unixでは、環境変数などの一部の環境変数は、個々の項目ではなく$PATH項目のリストであるという点で特別です。このタイプのリストでは、コロン(:)でリスト内の項目を区切ります。

$PATHただ印刷すると次のように見えるからです。

$ printenv PATH
/sbin:/bin:/usr/sbin:/usr/bin

追加アイテムを追加するには、新しいアイテムだけでなく古いリストも含める必要があります。あなたがそう言うとき、それは実際にあなたがやっていることですPATH=$PATH:<new item>

$ PATH=$PATH:/path/to/some/dir
$ printenv PATH
/sbin:/bin:/usr/sbin:/usr/bin:/path/to/some/dir

これらの変更は実行されるシェルにのみ適用されることに注意してください。再起動後も変更を保持したりシェルの他のインスタンスに表示したりするには、その$PATH変更がデフォルト値の一部になるように構成ファイルに追加する必要があります。

通常、ユーザーはこれらのファイルを使用して次のことを行います~/.bashrc~/.bash_profile

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

このような行を追加すると$PATH

代替$PATH使用

実行可能ファイルにないスクリプトと実行可能ファイルを実行したい場合$PATH$PATH

以下はシナリオです。次の実行可能ファイルがあるとします。

$ ls -l helloexec.bash
-rwxr-xr-x 1 user1 user1 31 Aug 12 07:45 helloexec.bash

しかし、そこにない$PATHので実行できません。

$ helloexec.bash
bash: helloexec.bash: command not found...

$PATHだからあなたは「ああ、これを実行するには私のアイテムに追加する必要がある」と思います。ただし、次のように現在のディレクトリから実行可能ファイルを実行できます。

$ ./helloexec.bash
hello bash

Unix型オペレーティングシステムでは、スクリプトと実行可能ファイルの両方$PATH

リスクが追加されました$PATH

あなたの例では、あなたはこれを~あなたの$PATH$PATH

これは一般的に良いアプローチではありません。代わりに、Linux / Unixで実行可能ファイルを保存する場所を慎重に検討し、目立つ場所(たとえば$PATH

ほとんどの人は通常、システムディレクトリを追加してから1つを追加して$HOME/binその$PATHままにします。より多くの内容を入力すると、$PATHコマンドが期待どおりに機能しない、または悪い場合など、意図しない結果が発生し、システムが破損する可能性が高くなります。

たとえば、Webサイトからいくつかのスクリプトをダウンロードしたが、Webブラウザがファイルを$HOME

または、シーケンスが次のように$PATH別のディレクトリ以前の状態にある場合~

$ printenv PATH
/home/vagrant:/sbin:/bin:/usr/sbin:/usr/bin

誤って以下の実行可能ファイルをダウンロードしました。

$ cat ps
#!/bin/bash

/bin/ps -eaf | grep -v "spyware"

誰かが実行すると、ps予想バージョンの代わりにこのバージョンを使用します/bin/ps

答え2

PATH は、システムの現在の PATH 値を含む環境変数です。相対または絶対位置なしで実行可能ファイル名を入力すると、実行可能ファイルが検索されているすべてのディレクトリが検索されます。

たとえば、現在のディレクトリで何かを実行したい場合、「.」は現在のディレクトリで何かを見つける必要があることを示すため、./somethingが機能します。シェルは実行可能ファイルを見つける必要があることを知っています。比較的現在のディレクトリに。詳しくはaskubuntuをご覧ください。。 ./somedirectory/something も使用できます。重要なのは、入力ディレクトリ構造がルート(/)から始まらないことです。

一つ絶対位置次のようになります。/home/flerb/somethingルートディレクトリから始まります。

$を使用してコマンドを入力すると、$ PATHはコマンドラインから展開され、その内容に置き換えられます。たとえば、次のようecho $PATHな内容が表示されることがあります。

$echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

env(コマンドラインで環境変数の現在の状態を確認できます)

Bashリファレンスマニュアルに記載されているチルダ実際、ほとんどの場合、HOME環境変数に置き換えられます。私が知らないチルダの奇妙な点を知りたい場合は、リファレンスマニュアルを参照してください。チルダの使用方法は次のとおりです。

$ echo ~
/home/flerb

$ echo $HOME
/home/flerb

したがって、パスが上記の場合は、次のように入力します。

(余談で、拡張機能を引用する理由)

PATH="$PATH":"$HOME"

または

PATH="$PATH":~

シェルはこれを次のように拡張します。

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/flerb

HOME は PATH の末尾に追加され、PATH 全体をホームディレクトリにのみ置き換えないと、いくつかの問題が発生する可能性があります。

横に

''は現在存在するディレクトリへのリンクです。完全性のために、RalfFriedlが指摘したように、これらのリンクが含まれています。ファイルシステムで意味を持つシェル組み込みコマンドです。見たら。そして.. ls -alの出力でそれが何であるか疑問に思います:、Linuxでは(.)と(..)は何ですか?ハードリンクとUnixファイルシステムノード

端側

答え3

に追加する場合、目的のPATH結果は、前の値にPATH追加されたディレクトリを追加したものです。

PATHしたがって、既存のディレクトリ(値)に新しいディレクトリが追加されます$PATH

PATH=$PATH:~

これはPATH現在のディレクトリを1つに置き換えるだけです。これは、もはや/bin実行可能ファイルが見つからないことを意味します/usr/bin。一般的には、これはしたくありません。

PATH=~

関連情報