Unterschied in cd .. und cd .. (Verzeichnis ändern)

418
Josip Ivic

cd..und cd ...

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

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?

1
@ Jarmund, nein es ist nicht doppelt, 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 vor 7 Jahren 0
Der Unterschied wird in den Antworten auf die verknüpfte Frage angegeben, dh in fast keiner. Was "Warum" angeht, wäre eine Antwort darauf meist spekulativ, da sie nirgends 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 vor 7 Jahren 3
Können Sie mir also zeigen, wo die Terminalbefehle von Linux zu dieser Antwort stehen? und warum ist in Terminal mit Leerzeichen und Eingabeaufforderung ohne Leerzeichen? Josip Ivic vor 7 Jahren 0
Auch in dieser Frage hat die Hauptrolle nicht den Unterschied. Es gibt nichts über Unterschiede. Josip Ivic vor 7 Jahren 1
Eine Antwort darauf würde sich auf eine Antwort auf "Warum unterscheidet sich die Unix-Design-Philosophie von der von MSDOS" beziehen, was viel zu breit wäre. Jedenfalls ist diese Diskussion zu gesprächig und nicht sehr konstruktiv. Wenn ich der einzige bin, der denkt, dass es ein Duplikat ist, ist das gut für mich, aber meine Überlegungen bleiben bestehen, also lasse ich die Community für sich entscheiden. Auf jeden Fall hoffe ich, dass Sie Ihre Antwort finden. Jarmund vor 7 Jahren 1
Es kommt nicht auf die Unterschiede an. Ich sage nur, dass dies nicht die gleiche Frage ist. Ich habe das zuerst gelesen und dann gefragt. Dies ist eine völlig andere Frage. Es hat die gleichen Berührungspunkte, aber es ist anders. Josip Ivic vor 7 Jahren 0
Sehen Sie, es bedarf einer mehrfachen engen Abstimmung, um als Duplikat zu gelten, meine allein bedeutet nichts anderes als meine Meinung. Wenn Sie noch etwas hinzufügen möchten, in der Hoffnung, meine persönliche Meinung in dieser Angelegenheit zu ändern, höre ich gerne Ihren Argumenten im Chat zu. Lassen Sie beide aufhören, den Kommentarteil durcheinander zu bringen. Jarmund vor 7 Jahren 0
Lassen Sie uns [diese Diskussion im Chat fortsetzen] (http://chat.stackexchange.com/rooms/42707/discussion-between-josip-ivic-and-jarmund). Josip Ivic vor 7 Jahren 0
@JosipIvic - Echo wird verwendet, um zu zeigen, dass es keinen Unterschied zwischen den Ausgängen gibt. Ihre eigene Frage zeigt an, dass es keinen Unterschied gibt. Ich sehe nicht, dass dies kein Duplikat dieser Frage sein kann. Ramhound vor 7 Jahren 0

1 Antwort auf die Frage

1
FUZxxl

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 werden die Wörter in jeden Raum aufgeteilt. Somit,

cd .. 

ist zwei Wörter aber

cd.. 

ist nur einer. Unter cd..UNIX gibt es keinen Befehl, daher schlägt letzterer fehl. Ersteres 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 Leerzeichen dazwischen ist verloren und echowird gedruckt

foo bar baz quux 

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

Unter Windows, DOS und CP / M COMMAND.COManalysiert die Shell den Befehlsnamen als das längste Präfix Ihrer Eingabe, bis ein Leerzeichen oder ein Interpunktionszeichen erreicht wird (auch dies ist 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 den Befehlsnamen für beendet hält. COMMAND.COMteilt die Befehlszeile 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 integrierter Befehl ist. Der eingebaute Befehl wird mit der Argumentzeichenfolge ausgeführt cd ..und die 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, schneidet den Rest aus Leerzeichen ab 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 echodruckt ordnungsgemäß

foo bar baz quux 

Dies ist der Grund, warum cd..in DOS gearbeitet wird, aber nicht unter UNIX.

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

-1 Wie können Sie gestern antworten und sagen: "Unter Windows, DOS und CP / M parst die Shell COMMAND.COM den Befehlsnamen". Das letzte Windows-Betriebssystem, in dem command.com verwendet wurde, war Windows 98. Sie sind etwa 18 Jahre alt Datum in Ihrer Aussage über Windows. Windows XP hatte sowohl cmd.exe als auch command.com, aber Sie sollten cmd.exe verwenden. Windows 7 hat command.com überhaupt nicht. 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 'cos, da weniger Arbeitsspeicher als 7 erforderlich ist. Seit Jahren hat fast niemand Win98 verwendet. barlop vor 7 Jahren 0
@ barlop Der Mechanismus ist in `cmd.exe` immer noch derselbe. Oder denken Sie, dass sich die Art und Weise, wie ein Prozess seine Befehlszeile erhält, in den letzten Jahren geändert hat? FUZxxl vor 7 Jahren 0
Es kann einige geringfügige Unterschiede geben, wie cmd und command.com Dinge analysieren, die für msdos möglicherweise keine Caret-Zeichen als Escape-Zeichen hatten, obwohl dies für cd und `cd..` nicht relevant ist. Mein Hauptpunkt war lediglich der Name der heute verwendeten Datei. barlop vor 7 Jahren 0
@ barlop Warum haben Sie mich dann für einen kleinen Punkt herabgestuft? Ist meine Antwort dadurch weniger korrekt? Nur nach unten, wenn die Antwort falsch ist * Ist meine Antwort falsch? FUZxxl vor 7 Jahren 0
Ich könnte abstimmen, wenn ich denke, dass etwas irreführend ist, zum Beispiel, dass command.com immer noch relevant ist barlop vor 7 Jahren 0
@ barlop Na dann schäme dich. Ich werde diese Antwort nicht ändern, nur weil Sie denken, dass dies nicht der Fall ist. FUZxxl vor 7 Jahren 0
Abgesehen von der Tatsache, dass Ihr Post sehr wahnsinnig ist, haben Sie A) geschrieben: "Die Shell COMMAND.COM parst den Befehlsnamen als das längste Präfix von dem, was Sie eingegeben haben, bis ein Leerzeichen oder eine Interpunktion erreicht wird" und B) entscheidet die Shell cd ist der Befehlsname, der zufällig ein eingebauter Befehl ist. " <--- Aber es scheint mir, dass 'A' nur bei einem eingebauten Befehl wahr ist. Wenn Sie eine Datei "blah.exe" haben und "blah" oder "blah.exe" ausführen, wird der Befehl nicht erkannt. barlop vor 7 Jahren 0