Unterschied zwischen cd .. und cd .. (Verzeichnis wechseln) [duplizieren]

1

Diese Frage hat hier bereits eine Antwort:

cd..und cd ...

Im Grunde machen sie dasselbe. Aber wer und warum hat daran gedacht, es mit oder ohne Raum zu verändern? Warum ist zwischen CD und zwei Punkten kein Platz?

C:\Windows\System32>cd..

und

[bla/www/something/something]#cd ..

Sie sind beide gleich. Warum hat einer Platz und ein anderer nicht?

BEARBEITEN:

Es ist kein Duplikat dieser Frage:

Warum funktioniert "cd .." in der Windows-Befehlszeile?

Josip Ivic
quelle
@Jarmund, nein, es ist kein Duplikat. Ich stelle hier eine andere Frage. Ich frage nach dem Unterschied zwischen diesen beiden. Warum gibt es einen Unterschied, nicht wie es funktioniert.
Josip Ivic
3
Der Unterschied wird in den Antworten auf die verknüpfte Frage angegeben, dh neben keiner. Was "Warum" betrifft, wäre eine Antwort darauf meist spekulativ, da sie nirgendwo dokumentiert wurde und zwischen ähnlichen Befehlen inkosistent ist, was auch in der Linkantwort angegeben ist. Die Frage kann anders formuliert sein, aber die Antwort ist immer noch gültig.
Jarmund
Können Sie mir sagen, wo sich die Linux-Terminalbefehle auf dieser Antwort befinden? und warum ist im Terminal mit Leerzeichen und in der Eingabeaufforderung ohne Leerzeichen?
Josip Ivic
1
Auch bei dieser Frage hat die Hauptrolle "Echo", nicht den Unterschied. Es gibt nichts über Unterschiede.
Josip Ivic
1
Eine Antwort darauf würde sich auf eine Antwort auf "Warum unterscheidet sich die Unix-Designphilosophie von der von MSDOS?" Wie auch immer, diese Diskussion ist zu gesprächig und nicht sehr konstruktiv. Wenn ich der Einzige bin, der denkt, dass es sich um ein Duplikat handelt, ist das in Ordnung für mich, aber meine Argumentation bleibt bestehen, sodass ich die Community selbst entscheiden lasse. Auf jeden Fall hoffe ich, dass Sie Ihre Antwort finden.
Jarmund

Antworten:

1

Auf UNIX-ähnlichen Systemen shtrennt die Shell das, was Sie eingeben, in Wörter und übergibt jedes Wort separat als Argument an das Programm oder den eingebauten Befehl, auf den das erste Wort verweist (der Befehlsname selbst ist das nullte Argument). Vereinfacht gesagt, werden Wörter auf jedem Feld aufgeteilt. Somit,

cd ..

ist zwei wörter aber

cd..

ist nur eine. Unter cd..UNIX gibt es keinen benannten Befehl , daher schlägt letzterer fehl. Ersterer ruft cdmit dem einzigen Argument auf ..und ändert ein Verzeichnis nach oben. Für ein komplizierteres Beispiel

echo foo bar  baz   quux

wird in die vier Wörter geparst echo, foo, bar, baz, und quuxdie dann zu dem übergebenen echoBefehl als Argumente. Die Menge an Whitespace dazwischen geht verloren und echowird gedruckt

foo bar baz quux

da es immer ein einzelnes Leerzeichen zwischen jedem Argument einfügt.

Unter Windows, DOS und CP / M COMMAND.COManalysiert die Shell den Befehlsnamen als das längste Präfix dessen, was Sie eingegeben haben, bis ein Leerzeichen oder eine Interpunktion erreicht ist (dies ist ebenfalls eine Vereinfachung). Dann wird der Befehl mit der gesamten Zeile ausgeführt, die Sie als Argument eingegeben haben. Ein Zeiger zeigt an, wo der Befehlsinterpreter glaubt, dass der Befehlsname beendet ist. COMMAND.COMteilt die Kommandozeile nicht in Argumente auf, wenn das Programm dies wünscht, muss es dies selbst tun.

Zum Beispiel cd ..entscheidet in der Shell, dass dies cdder Befehlsname ist, der zufällig ein eingebauter Befehl ist. Der eingebaute Befehl wird mit dem Argument string ausgeführt cd ..und der Information, dass die ersten beiden Zeichen den Befehlsnamen bilden. In ähnlicher Weise cd..entscheidet die Shell, dass dies cdder Befehlsname ist und ..als Operandenname übergeben wird. Der cdBefehl überspringt den Befehlsnamen, entfernt den Rest aus dem Leerraum und versucht dann, in das angegebene Verzeichnis zu wechseln.

Ähnlich für,

echo foo bar  baz   quux

Die Shell ruft den echoBefehl mit echo foo bar baz quuxden Argumenten auf und gibt ihn echoordnungsgemäß aus

foo bar  baz   quux

Dies ist der Grund, warum es cd..unter DOS, aber nicht unter UNIX funktioniert.

Beide Entwürfe haben ihre Vor- und Nachteile, obwohl der UNIX-Stil fast alle Systeme übernommen hat, da es viel einfacher ist, sie zu programmieren, da nur ein Programm (die Shell) wissen muss, wie man eine Befehlszeile in Wörter aufteilt, im Gegensatz zu jedem anderen Programm mit seiner eigenen hausgemachten Lösung.

FUZxxl
quelle
-1 Wie können Sie gestern antworten und sagen, dass On Windows, DOS and CP/M, the shell COMMAND.COM parses the command name das letzte Windows-Betriebssystem, unter dem command.com verwendet wurde, Windows 98 war? In Ihrer Erklärung zu Windows sind Sie ungefähr 18 Jahre veraltet. Windows XP hatte sowohl cmd.exe als auch command.com, aber Sie sollten cmd.exe verwenden. Windows 7 verfügt überhaupt nicht über command.com. Und jetzt werden Computer mit Windows 10 verkauft. Sie sehen nicht einmal mehr jemanden, der Windows 98 verwendet. Einige in Indien verwenden immer noch XP, da es weniger RAM als 7 benötigt. Seit Jahren verwendet fast niemand mehr Win98.
Barlop
@barlop Der Mechanismus ist immer noch der gleiche in cmd.exe. Oder glauben Sie, dass sich die Art und Weise, wie ein Prozess seine Befehlszeile erhält, in den letzten Jahren geändert hat?
FUZxxl
Es kann einige kleine Unterschiede geben, wie cmd und command.com Dinge analysieren, die msdos möglicherweise nicht als Escape-Zeichen hatten, obwohl dies für cd und nicht relevant ist cd... Mein Hauptpunkt war lediglich der Name der Datei, die heutzutage verwendet wird.
Barlop
@barlop Warum hast du mich dann für einen kleinen Punkt abgelehnt? Ist meine Antwort dadurch weniger korrekt? Nur abstimmen, wenn die Antwort falsch ist. Ist meine Antwort falsch?
FUZxxl
Ich könnte downvote , wenn ich etwas denke irreführend ist zB , dass command.com was darauf hindeutet , ist immer noch relevant
barlop