このコマンドを実行するとどうなりますか?
PATH =$PATH:`pwd`
エラー:ターミナルでコマンドを実行しても何も起こりません。
質問でコマンドを実行すると、エラーメッセージが表示されます。
$ PATH =$PATH:`pwd`
bash: PATH: command not found
スペースがタイプミスであり、実際にこれを実行する場合:
PATH=$PATH:`pwd`
次に、現在のディレクトリ(pwd
は現在のディレクトリのパスを出力するコマンドであり、`pwd`
はpwd
の出力に置き換えられます)を現在のシェルセッションの期間中のPATH
変数に追加します(util端末を閉じます)。説明する:
$ pwd
/home/terdon/foo ## I am in /home/terdon/foo
$ echo $PATH ## the current PATH
/home/terdon/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ PATH=$PATH:`pwd`
$ echo $PATH
/home/terdon/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/terdon/foo
現在のディレクトリ/home/terdon/foo
がPATH
変数の最後に追加されていることに注意してください。
元のコマンドに関する限り、 terdon's answer は、何が起こっているのか、何を起こすべきなのかをすでに十分にカバーしています。それをもう少し詳しく分析してみましょう。
あなたがやろうとしているのは、変数の割り当てです。
varName=value
ただし、スペースがあるため、これはコマンドとして扱われますPATH
コマンドライン引数は=
で構成され、変数$PATH
の内容とpwd
のコマンド置換、すべて同じ文字列に参加しました:
PATH =$PATH:`pwd`
もちろん、PATH
などのコマンドはないため、エラーが発生します。
シェルは、単純なコマンドとその引数を、1つ以上のスペースで区切られたトークンのリストとして扱います(おそらく、その前にオプションの変数を割り当てます)。つまり、フォームは次のようになります。
[VAR=value] Word [arg1 [arg2 [arg3] ]...]
もちろん、これはこの場合に望ましいことではありません。
それで、するべきことはこれです:
PATH=$PATH:`pwd`
ここで、適切な変数の割り当てがあります。 展開順序 に従って、bash
Shellは最初に変数の展開を実行します。つまり、$PATH
をその変数に現在あるもので置き換えます。次に、pwd
を実行し、pwd
の出力に置き換えるコマンド置換を実行します。最後に、すべてがPATH
変数に割り当てられます。
いくつかの重要な観察結果:
$PATH
変数を引用符で囲む必要はありませんが、通常は望ましくない動作を避ける必要があります。 二重引用符が必要な場合 を参照してくださいPATH
変数は、コマンドを見つけるためにシェルによって使用され、そのリスト上のディレクトリの順序により、コマンドが検索される場所の優先順位が設定されます。したがって、たとえば、コマンドを実行すると、シェルはまずコマンドが built-in であるかどうかを確認し、そうでない場合はPATH
変数のすべてのディレクトリを調べます。 PATH=$PATH:$(pwd)
は、シェルに他のすべてを走査させ、それからpwd
で指定されたディレクトリに到達します。対照的に、PATH=$(pwd):$PATH
は、最初にpwd
によって返されたディレクトリから検索を開始します。したがって、割り当ての順序が重要です。