No.7ベストアンサー
- 回答日時:
はじめに
yami_stさんへ
回答以外のことでの書き込みお赦し下さい。
Ryowさんへ
すいません。余計なことなんであまり気にしないで下さい。
飽くまでもこれは自分の意見というだけであり、
RyowさんはRyowさんの意見があるわけで
色々な人の意見が有っていい、というより寧ろ有るべきと自分は考えます。
自分の回答本文にもありますが
「皆様それぞれにお考えがあるかと存じます。
結局は、聞く側がどの様に判断するかということですが。」
自分が言いたかったのは「結局は~」以降の
それら様々な方々の意見のを聞く側の方がどう受け止めるか
情報の海から真贋を見極めるという
聞く側の情報の取捨選択が重要であると考えています。
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にする為の環境を与えて呉れるでしょうか
環境をそろえる為の金銭を出すでしょうか。
いいえ、与えて呉れませんし金銭を出してくれません。
そこで、自分は丁重にお断りしました。
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:\」等の
様に自分が現在作業しているディレクトリのことです。
この回答への補足
>「同じ名前のコマンドがあれば、MS-DOSが最初に見つけた方の
>コマンドが実行されてしまうんでしょうか? 」については
>そう考えて良いと思います。
ということは、あまりむやみにPATHを通さない方がいいという事
でしょうか。あまりPATHを通すと、それだけ同じ名前のコマンドが
出てくる可能性も高くなるから、誤動作(?)の可能性も
高くなるとかあるんでしょうか?
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/environ …
No.1
- 回答日時:
変数とは、変えることが出来る数です。
xとかyとか。MS-DOSは、基本的にコマンドがカレントディレクトリ(今開いているディレクトリ)に無ければ実行出来ません。
しかし、いちいちディレクトリを移動していたら大変です。MS-DOSがコマンドの位置を把握してくれていたら、ユーザはいちいちディレクトリの変更をしなくてもすみます。
PATHを設定しておくと(ユーザが自由に設定することができます)、MS-DOS(command.com)はPATHで設定されたディレクトリを順番に探して、要求されたコマンドが見つかればそれを実行してくれます。このPATHが「環境変数」です。つまり、「環境変数」は「プログラムが動作する環境についての変数」です。
この回答への補足
PATHを複数、設定した場合、PATHで設定された全ディレクトリの内、
同じ名前のコマンドがあれば、MS-DOSが最初に見つけた方の
コマンドが実行されてしまうんでしょうか?
そもそもコマンドというのが何かよく分ってないんですが・・。
命令とかそういう意味合いのものという事しか
分らないです。
それと、新たな質問になってしまうので
別の機会にした方が良いのかも知れませんが・・
もしよければ教えて下さい。
「COMMAND.COM自身が利用する環境変数」って
どういうことでしょうか?
MS-DOSは実行する本体?だから環境変数とかは
意味がないのでは?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 パスを通す 1 2022/09/10 20:01
- その他(OS) Windowsで大量の画像サイズを半自動で変更する方法 6 2023/02/17 08:45
- その他(プログラミング・Web制作) Pythonの作業環境・作業フォルダの迅速な設定・指定方法 3 2022/04/01 07:55
- ルーター・ネットワーク機器 AU光10G回線について 6 2022/07/25 00:12
- ノートパソコン Windows11、アプリ、設定。 1 2022/10/07 13:30
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- ルーター・ネットワーク機器 transix回線で契約、外部からIPv6でNASにアクセスしたい 1 2023/01/26 15:07
- Windows 10 pathが通らない 2 2023/03/27 11:28
- その他(プログラミング・Web制作) ログインシェル時のSHELL環境変数 1 2022/06/08 19:21
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチ終了時にDOS窓を閉じるコ...
-
バッチファイル 文字列にスペ...
-
make test って何をするための...
-
バッチコマンドのIF文(条件...
-
ftpコマンドを実行すると「425 ...
-
AccessVBAで実行時間を指定する...
-
FTP送信エラーの検知について
-
フォルダ、ファイル操作に最適...
-
sedコマンドで改行コードを削除...
-
コンピュータ名をファイル名に...
-
コマンドプロンプトをクリック...
-
ftpのタイムアウト指定
-
DOSコマンドで指定日数よりも過...
-
コマンドプロンプトで、特定の...
-
コマンド プロンプト
-
コマンドプロンプトでファイル...
-
シェル(sh)で実行コマンドを標...
-
if [ 条件式 ]とif[[ 条件式 ]]
-
コマンドプロンプトのFTPコマン...
-
ショートカットをデスクトップ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ終了時にDOS窓を閉じるコ...
-
バッチファイル 文字列にスペ...
-
ショートカットをデスクトップ...
-
コマンドプロンプトをクリック...
-
ftpコマンドを実行すると「425 ...
-
make test って何をするための...
-
バッチコマンドのIF文(条件...
-
シェルの「:コマンドが見つか...
-
findstrでヒットした1行前の文...
-
コマンドプロンプトで、特定の...
-
バッチファイルを使ってテキス...
-
AccessVBAで実行時間を指定する...
-
SSH接続でwindowsサーバのコマ...
-
DOSコマンドで指定日数よりも過...
-
コマンドプロンプトでファイル...
-
FTPの連続実行でフリーズする
-
コマンドプロンプトのバッチで...
-
シェルからpsqlコマンドでトラ...
-
フォルダ、ファイル操作に最適...
-
VBSでタイマー
おすすめ情報