• ベストアンサー

環境変数

環境変数って何でしょうか?  アプリケーションプログラムやバッチプログラムに対して、ユーザーが設定する変数。環境変数の設定には、MS-DOSのSETコマンドを使用する。COMMAND.COM自身が利用する環境変数としては、COMSPEC、PATHがある。 とありますが意味がわかりません。 「ユーザーが設定する変数」の「変数」って? 環境変数が何なのか教えて頂けないでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.7

はじめに yami_stさんへ 回答以外のことでの書き込みお赦し下さい。 Ryowさんへ すいません。余計なことなんであまり気にしないで下さい。 飽くまでもこれは自分の意見というだけであり、 RyowさんはRyowさんの意見があるわけで 色々な人の意見が有っていい、というより寧ろ有るべきと自分は考えます。 自分の回答本文にもありますが 「皆様それぞれにお考えがあるかと存じます。 結局は、聞く側がどの様に判断するかということですが。」 自分が言いたかったのは「結局は~」以降の それら様々な方々の意見のを聞く側の方がどう受け止めるか 情報の海から真贋を見極めるという 聞く側の情報の取捨選択が重要であると考えています。

その他の回答 (6)

  • Ryow
  • ベストアンサー率38% (124/325)
回答No.6

akishizumaさんへ 大変失礼いたしました。 言葉が過ぎましたことをお詫びいたします。 プログラムを開発されている方の立場を無視した発言、恥ずかしく思います。

回答No.5

失礼とは存じますが、助言とちょっと意見を。 >あまりPATHを通すと、それだけ同じ名前のコマンドが >出てくる可能性も高くなるから、~ >大体、同じファイル名の、全く動作の違うプログラムなど、 >ウィルスでもない限りは作られることはありませんから。 >若し、そんなプログラムに遭遇したというのなら、 >プログラムの作成者に文句言ってください。 残念ながらUNIXとかWINDOWSでもよくあります。 UNIXとかなら使用するユーザ(グループ毎のときもありますがここでは 簡単にひとくくりにします)により 環境を変えてユーザ毎に参照パスを変えることはよくあります。 UNIX/WINDOWS系にかかわらず 同一コマンド名で元のプログラムの機能に拡張性を持たせたプログラム作って 自分のが使うときは其方を参照するようにパスをきるなんてよくやってました。 最近のユーザはやらないのかなぁ。 DOSの頃なんて、MS-DOS3.3Dと5.0のCOMMAND.COMをスイッチングして 使ってたけど...。 過渡期のOSでは同じファイル名で違うユーザインターフェースなんて ざらじゃないかなぁ。 確かに事実おっしゃられるような悪意有るプログラムも 最近非常に増えてきています。 ですが、結局はこれに限らず使う側がどの様に使うか、どの様に対処するか なのではないでしょうか。 「同じファイル名の、全く動作の違うプログラムなど、ウィルス云々 そんなプログラムに遭遇したというのなら、プログラムの作成者に文句言ってください。」 というのは如何なものでしょうか。 皆様それぞれにお考えがあるかと存じます。 結局は、聞く側がどの様に判断するかということですが。 簡単な例をひとつ WINDOWS系のある環境に於けるDLLファイルについて プログラマーさんが2人いました。 それぞれが、便利なあるプログラムA.EXEとB.EXEを作りました。 A.EXE、B.EXEからよばれるC.DLLがあります。 C.DLLは他から提供されているものなので改竄は出来ません。 Aさんの環境にはC.DLLはVer.1が入っています。 Bさんの環境にはC.DLLはVer.2が入っています。 2人それぞれの環境は特に問題なく動いています。 2人はフリープログラムとしてそれぞれのプログラムを公開しました。 勿論、指定するバージョンのC.DLLを使用する旨の注意も怠り無くしています。 ここで、Cさんがこれは便利だとA.EXE、B.EXEを使用し始めました。 Cさんの環境はBさんの環境に酷似していて、既にC.DLLのVer.2が入っています。 B.DLLのVer.2はB.EXEの使用においては支障が無いのですが A.EXEでは上手くいきません。 そこで、C.DLLのVer.1をA.EXEのカレントにおきました。すると上手く動きました。 後日談 UNIX系ではよくあることですが、WINDOWS系ばりばりのCさんは C.DLLが2つあるのは気に入りません。 そこでCさんAさんにC.DLLをVer.2にして開発して下さいとメールをしました。 しかし、Aさんからは丁重にお断りのメールが来ました。 というのも、 その方がC.DLLをVer.2にする為の環境を与えて呉れるでしょうか 環境をそろえる為の金銭を出すでしょうか。 いいえ、与えて呉れませんし金銭を出してくれません。 そこで、自分は丁重にお断りしました。

  • Ryow
  • ベストアンサー率38% (124/325)
回答No.4

>。あまりPATHを通すと、それだけ同じ名前のコマンドが 出てくる可能性も高くなるから、 同じ名前のコマンドと言うのは同じ動作をするものであって、故意に名前を変えたりしない限りは問題は発生しません。 但し、コマンド自体のバージョンが違っていると正常に動作しないアプリケーションもありますので、複数のバージョンが存在するコマンドについては、可能な限り最新の物に置き換えておくといいでしょう。 (多くの場合、新しいバージョンのコマンドは、それまでのバージョンを内包しており、ほぼ問題なく動作します。) また、「*.exe」と「*.com」、「*.bat」がある場合、ファイル名が同じであれば、拡張子を付けてやる必要があります。 逆に言えば、コマンドラインで拡張子を付けて実行してやれば、誤動作は無いとも言えます。 大体、同じファイル名の、全く動作の違うプログラムなど、ウィルスでもない限りは作られることはありませんから。 若し、そんなプログラムに遭遇したというのなら、プログラムの作成者に文句言ってください。

回答No.3

環境変数というのは、UNIXを参考にしたCP/Mその後のMS-DOSに 引き継がれたものです。 先に回答なされている方の言う通りで プログラム(アプリケーションやOS関連やシェルやバッチファイルも含む)に 汎用性を持たせる為のものです。 MS-DOSの流れを汲むものはコマンドラインから入力された コマンド(COPYコマンドやDELコマンド等)を COMMAND.COMというコマンドインタプリタが解釈してコマンドを実行します。 ここまで簡単に書いたのですが疑問符だと思います。 環境変数ってどういう時に使ったりするのという疑問も出てきたのでしょう。 で、ここから回答への補足でご質問されている 「COMMAND.COM自身が利用する環境変数」と 「MS-DOSは実行する本体?だから環境変数とかは意味がないのでは?」 が関係してきます。 例えば、COMMAND.COMの起動を命令されました。 COMMAND.COMは命令されたはいいが作業をどこで実行しようかと考えます。 ここで、環境変数を参照するわけです。 貴方や私のマシン毎にディレクトリ構成は違うかもしれませんし、 COMMAND.COMに作業してもらいたいディレクトリも 貴方と私では違うかもしれません。 ここで、COMMAND.COMに作業するディレクトリを必ずこのディレクトリと プログラム内で決めてしまうと 貴方や私のマシンの様に環境が異なる場合に 「作業するディレクトリがないよぉ、起動できないよぉ」 とCOMMAND.COMが困ってしまいます。 そこで 作業するディレクトリを示す情報を参照すると 「%HOMEDRIVE%%HOMEPATH%」の様に書いてあります。 HOMEDRIVE、HOMEPATHって何処という情報を環境変数を参照しで解釈して (HOMEDRIVE=C:、HOMEPATH=\となっているとすると) 作業するディレクトリをCドライブのルートディレクトリ(\)だとCOMMAND.COMは 判断します。 因みに環境変数COMSPECで参照できる情報は 何処にあるCOMMAND.COMをコマンドインタプリターとして 使用するかという情報です。 COMMAND.COM自身が利用する環境変数でCOMSPECというのは微妙かなと思います。 試しに、DOS窓をあけてコマンドプロンプトでSETと打ってENTERキーを押下してみて下さい。 COMSPEC意外にも沢山の環境変数を見ることが出来ます。 コマンドプロンプトのアイコンがみつけられなければ お使いのOSがWin98系ならば 「スタート」→「ファイル名を指定して実行」で でcommandと お使いのOSがWinNT/2000系ならば 「スタート」→「ファイル名を指定して実行」で でcmdと 入力してみて下さい また、 「同じ名前のコマンドがあれば、MS-DOSが最初に見つけた方の コマンドが実行されてしまうんでしょうか? 」については そう考えて良いと思います。 但し、カレントディレクトリに指示されたコマンドを見つけることが 出来なかった場合に 環境変数のPATHで指定されたディレクトリを探しにいって 最初に見つけた指定されたコマンドを実行します。 という説明で如何でしょうか。 因みに下記に文言の説明を付記しておきますので参照して頂ければ幸いです。 ※シェルやバッチファイルについてはプログラムの親戚と思って頂いても  あながち間違いでは有りません。 ※コマンドライン:Windowsでは確かコマンドプロンプトというアイコンがあって  それをクリックするとDOS窓が開いて「C:\> 」みたいのが出てきます。  これがコマンドラインです ※コマンドとは簡単に言えば使用者がコンピュータにこういう事やってよ  みたいな命令のことを指すと思って頂いて大丈夫です。  使用者が作ったプログラムの場合もありますが細かいことは ※コマンドインタプリタ:入力されたコマンドの文字列を判断して  指定された命令を実行します。  COMMAND.COMにはCOPYコマンドやDELコマンド等が内包されており、  FORMATコマンド、SCOPYコマンド等はCOMMAND.COMから切り離された  別プログラムとして存在しています。 ※ディレクトリ:フォルダとも呼称されます。 ※%~%は%で挟まれた文字列が環境変数であるとCOMMAND.COM等のプログラムが  判断します。  %HOMEDRIVE%ならば、COMMAND.COMは「HOMEDRIVE」が環境変数であると  判断します。 ※カレントディレクトリ:命令をコマンドラインから入力する場合は「C:\」等の  様に自分が現在作業しているディレクトリのことです。

noname#786
質問者

補足

>「同じ名前のコマンドがあれば、MS-DOSが最初に見つけた方の >コマンドが実行されてしまうんでしょうか? 」については >そう考えて良いと思います。 ということは、あまりむやみにPATHを通さない方がいいという事 でしょうか。あまりPATHを通すと、それだけ同じ名前のコマンドが 出てくる可能性も高くなるから、誤動作(?)の可能性も 高くなるとかあるんでしょうか?

noname#9808
noname#9808
回答No.2

環境変数というのは、Windowsの前身MS-DOS等で使われていた一種の隠し技のようなものですが、これを説明する前に『変数』を説明したほうが良いでしょうか? この場合の変数というのは数学で言う変数と似ています。 例えば、 y=2x+3(2や3は定数・x、yが変数)です。 ちなみにπ(パイ)は3.141592・・・・で定数として扱われるんじゃなかったですかね。 このように一つの名前(xやy)で表されるが、内容は利用者の自由に割り当てる事が出来る物を変数と言います。 環境変数の場合は、数限りなく存在するシステム構成の違うマシンで共通して、MS-DOSやwindows、アプリケーションを使うためにシステムの違いを共通の変数に置き換えて実行するために用意されていますので、値が数値とは限りません。 分かり易いのは、昔のNECのPC-98系のマシンでは、systemdrive(システムドライブ・OSが入っているドライブ)がA:でしたが、他のマシンではC:でした。これは今でも殆どのWindows系のマシンではそうですね。 この違いを上記に有るCOMSPECやPATHという環境変数は吸収してくれています。 お分かりいただけたでしょうか?

参考URL:
http://www2.startshop.co.jp/~68user/unix/environment.html
noname#786
質問者

お礼

ありがとうございました

noname#4643
noname#4643
回答No.1

変数とは、変えることが出来る数です。xとかyとか。 MS-DOSは、基本的にコマンドがカレントディレクトリ(今開いているディレクトリ)に無ければ実行出来ません。 しかし、いちいちディレクトリを移動していたら大変です。MS-DOSがコマンドの位置を把握してくれていたら、ユーザはいちいちディレクトリの変更をしなくてもすみます。 PATHを設定しておくと(ユーザが自由に設定することができます)、MS-DOS(command.com)はPATHで設定されたディレクトリを順番に探して、要求されたコマンドが見つかればそれを実行してくれます。このPATHが「環境変数」です。つまり、「環境変数」は「プログラムが動作する環境についての変数」です。

noname#786
質問者

補足

PATHを複数、設定した場合、PATHで設定された全ディレクトリの内、 同じ名前のコマンドがあれば、MS-DOSが最初に見つけた方の コマンドが実行されてしまうんでしょうか? そもそもコマンドというのが何かよく分ってないんですが・・。 命令とかそういう意味合いのものという事しか 分らないです。 それと、新たな質問になってしまうので 別の機会にした方が良いのかも知れませんが・・ もしよければ教えて下さい。 「COMMAND.COM自身が利用する環境変数」って どういうことでしょうか? MS-DOSは実行する本体?だから環境変数とかは 意味がないのでは?