コンソール コマンド cd は一種のワイルドカードですか?

コンソール コマンド cd は一種のワイルドカードですか?

アプリケーションを開発しているときに(開発に関する質問ではありませんが)、cdWindows で使用されるコマンドがワイルドカードまたはクロスプラットフォーム コマンドのようなものかどうか疑問に思いました。Unix/Linux および MAC OS X のコマンドの表を調べたところ、そこにあるようです。私はマルチ OS ユーザーではないので、異なる OS での経験がある方がいらっしゃいましたら教えてください。

  1. このコマンドが実際に存在し、機能する場合
  2. 同じ機能がある場合(ディレクトリの変更)
  3. 使用中に問題が発生した場合
  4. どの OS でも、同じことをより優れた/より複雑な/より頻繁に使用される方法で実行する別のコマンドライン コマンドが存在する場合。

前もって感謝します!

(PSI、この質問がこのサイトに属するのか、それとも他の StackExchange サイトに属するのかは 100% 確信がありません...)

(追記: タグ付けのご協力をいただければ幸いです!)

答え1

このコマンドが実際に存在し、機能する場合

ええ、はい、存在し、機能します。

同じ機能がある場合(ディレクトリの変更)

はい、そうです。他の何かを実行するプログラム (例: ) を簡単に作成できないというわけではありませんcd.exeが、通常はシェルに組み込まれたコマンドで、現在のディレクトリを変更します。

使用中に問題が発生した場合

どのような問題がありますか? と を除けば...その構文は非常に簡単です。唯一の複雑さは、他のボリューム (ドライブ文字) の現在のディレクトリを変更するときです。また、Windows のコマンド拡張機能により、その使用法がわずかに拡張されますが、実際に問題を引き起こすことはありません。

どの OS でも、同じことをより優れた/より複雑な/より頻繁に使用される方法で実行する別のコマンドライン コマンドが存在する場合。

実際にはそうではありません。他のコマンドもあるかもしれませんが、これは簡潔で便利cdです。ディレクトリに加えて現在のドライブを変更する以外に (例: cd /d t:\blah)、現在のディレクトリの変更をどのように改善できるでしょうか?


これは話題から外れますが(関連はありますが)、どうやら一部の人は、コマンドCD持っているシェルに組み込まれる。実際はない; それできる外部プログラムである。オペレーティングシステムによっては簡単にできるものもあれば、難しいものもあり、不可能にしてしまうものもあるが、実際にはできる外部的ではなく常に組み込む必要がある一部の人が信じているように。たとえば、XP や 7 などの 32 ビット バージョンの Windows では、コンソール サブシステム (Windows でテキスト モード プログラムをサポートおよび実行する方法) が古い「DOS」割り込み 0x21 をサポートしているという事実を利用できます。はい、cmd`command だけでなく、でもサポートされます。(64 ビット バージョンの Windows では下位互換性が大幅に低下しているため、動作しません。)

たとえば、以下のデバッグ スクリプトを として保存し、コマンド ラインからc.scr実行してコンパイルすることができます。これにより、現在のディレクトリを変更するために使用できるファイルが作成されます。debug < c.scr.com

a
mov si,82
mov dl,[si]
or dl,20
sub dl,61
mov ah,e
int 21
mov dl,[si]
cmp dl,d
jz 119
inc si
jmp 10f
xor dl,dl
mov [si],dl
mov dx,82
mov ah,3b
int 21
mov ah,4c
int 21

n c.com
rcx
28
w
q

(長いファイル名はサポートされていないので、8.3バージョン。現在のドライブも変更されるため、1 回の操作でディレクトリを別のドライブに変更できますが、これは非常に単純な方法で行われ、エラー チェックは行われないため、ドライブが存在する文字で始まるディレクトリに変更しようとしても機能しません。つまり、 はc c:\windowsと同じように機能しますc \windowsが、という名前のディレクトリが含まれていない限り、ドライブがc asdある場合は は機能しません。必要に応じてこれを拡張してエラー チェックなどを追加できますが、これは Windows で外部になる可能性があるという私の主張を証明しています。A:asdcd

次の Pascal プログラムを (たとえば、 としてc.pas) 保存し、Turbo Pascal または FreePascal コンパイラの GO32 バージョンでコンパイルすることもできます (32 ビット バージョンは通常の Windows API を使用するため動作しません)。

program cd;
begin
  chdir(paramstr(1));
end.

もう一度、現在のディレクトリを変更するには、これを実行するだけです (例: `c.exe "c:\program files" - はい、長いフォルダ名も使用できますが、実行時に自動的に 8.3 形式の名前に変換されます)。

答え2

ディレクトリ変更コマンドのアイデアは、cd1969 年に Unix の一部として発明されました。これは、、、lsなどrmの他のほとんどの Unix コマンドと同様に簡潔ですsed。また、デバイスでさえ の下にあるファイルである、Unix の一部として発明されたツリー構造のファイルシステムと一致しています/dev。Unix 以前には、一般ユーザーが簡単にディレクトリを作成できるツリー構造のファイルシステムを備えた OS があまりなかったことは忘れられがちです。通常は、(せいぜい) どこかにファイルの山があり、それを操作する IEBGENER などの奇妙な IBM ユーティリティがあるだけです。

これcdによって、現在のプロセス (この場合はシェル) の現在のディレクトリが変更され、オペレーティング システムが相対ファイル名 (つまり、ファイル/システムのルートから完全修飾されていないファイル名) を解釈する方法に影響します。現在のディレクトリは、親プロセスから子プロセスに継承されます。

Unix または Linux システムと Windows システムでは、 のセマンティクスに大きな違いがいくつかありますcd。1 つは、cdオペランドがない場合、 は何をすべきかということです。Unix または Linux では、ホーム ディレクトリに移動します。Windows では、cmd.execd単に現在のディレクトリを報告します。また、Windows は単一のルートではなく、ドライブ文字があり、それぞれに現在のディレクトリを設定できます。ただし、舞台裏の実装では、Microsoft がそれを壁越しにアプリケーション スペースに投げ込んでいます。各プロセスには、 などの奇妙な名前の隠し環境変数があり、=C:アプリケーションはそれを最新の状態に保つ必要があります。

いくつかのcdコマンドは他のものよりも優れていますが、これは好みの問題かもしれません。CシェルCDPATH変数と同じように動作するがPATH、実行ファイルではなくディレクトリを検索するというアイデアが導入されました。Cシェルでは、ディレクトリスタックも導入され、pushdまたはpopd現在のディレクトリを検索できるようになりました。独自のCシェル私はそれをすべてコピーし、オペランドがない場合に何をすべきかをユーザーが決定できるようにするオプションcdと、2 つ以上のドットを入力するとcd ....n-1 レベル上がるという顧客からの提案機能を追加しました。

答え3

はい、cdLinux、OSX、その他の *nix OS で動作する *nix コマンドです。

答え4

DOS および Windows のコマンドcdは Unix/Linux のコマンドと非常に似ていますが、それには理由があります。ディレクトリの概念全体が Unix からコピーされたからです。

MS-DOS(PC-DOSとしてブランド化)を実行した最初のシステムはIBM PCでした。ハードディスクはなく、ストレージは180Kと360Kの容量のフロッピーでした。メディアが限られていたため、複雑なファイル名の付け方は不要でした。そのため、完全修飾ファイル名はドライブ指定子とそれに続く8.3 ファイル名またはa:autoexec.batなどb:advent.exe

MS-DOS 2.0 は、Unix の機能をコピーすることで、このような多くの問題に対処しようとしました。これには、ディレクトリと、それらを処理するコマンドが含まれます。1 つの問題は、MS-DOS がすでにオプションの引数を示すために / 文字を使用していたことです。これが、Windows と Unix が異なるパス区切り文字を使用する理由です。

重要な違いの 1 つは、Unix にはドライブ指定子のない統一されたディレクトリ階層があることです。cdコマンドを MS-DOS に適応させるにあたり、Microsoft はドライブ指定子を考慮した「現在のディレクトリ」の概念の新しい意味を考案する必要がありました。下位互換性を最大限に高めるため (a:somethingつまり、 のような名前が意味を成すようにするため)、Microsoft は「現在のドライブ」の概念を考案し、各ドライブに独自の「現在のディレクトリ」があることを定めました。したがって、「現在のディレクトリ」を変更すると、実際には現在のドライブの現在のディレクトリが変更されます。通常、このような詳細は心配する必要はありません。しかし、電源を入れたときに何も起こらないように見えるのはなぜかは説明できc:\somedirますcd d:\otherdirもっている発生した問題は、現在のドライブを変更せずに、ドライブの現在のディレクトリを変更したことです。これを行うには、コマンドd:を入力する必要があります。d:

関連情報