Разница в cd .. и cd .. (Изменить каталог)

335
Josip Ivic

cd..и cd ...

В основном они делают то же самое. Но кто и почему думал об изменении его с пространством или без пространства? Почему есть место и почему нет места между cd и двумя точками?

C:\Windows\System32>cd.. 

а также

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

Они оба одинаковы. Почему у одного есть место, а у другого нет?

РЕДАКТИРОВАТЬ:

Это не дубликат этого вопроса.

Почему «cd ..» работает в командной строке Windows?

1
@ Jarmund, нет, это не дубликат, я задаю здесь другой вопрос. Я спрашиваю о разнице между этими двумя. Почему есть разница, а не КАК это работает? Josip Ivic 7 лет назад 0
разница указана в ответах на связанный вопрос, т.е. почти нет. Что касается «Почему», то ответ на этот вопрос был бы в основном умозрительным, поскольку он нигде не документирован и не имеет места между аналогичными командами, что также указано в ответе по ссылке. Вопрос может быть сформулирован по-разному, но ответ остается в силе. Jarmund 7 лет назад 3
Итак, можете ли вы указать мне, где находятся команды терминала Linux на этот ответ? а почему в терминале с пробелом, а в командной строке без пробела? Josip Ivic 7 лет назад 0
Кроме того, в этом вопросе главную роль играет «эхо», а не разница. Там нет ничего о различиях. Josip Ivic 7 лет назад 1
Ответ на этот вопрос сводится к ответу на вопрос «Почему философия дизайна Unix отличается от философии MSDOS», который был бы слишком широким. Во всяком случае, эта дискуссия слишком разговорчива и не очень конструктивна. Если я единственный, кто считает, что это дубликат, это нормально для меня, но мои рассуждения остаются в силе, поэтому я позволю сообществу решать за себя. В любом случае, я надеюсь, что вы найдете свой ответ. Jarmund 7 лет назад 1
Это не будет сводиться к различиям. Я просто заявляю, что это не тот же вопрос. Я сначала прочитал это, затем я спросил это. Это совершенно другой вопрос. У него такие же трогательные пятна, но они разные. Josip Ivic 7 лет назад 0
Послушайте, для того, чтобы это считалось дубликатом, требуется несколько близких голосов, одно только мое не означает ничего, кроме моего мнения. Если вам есть что добавить, в надежде изменить мое личное мнение по этому вопросу, я буду рад выслушать ваши аргументы в чате. Давайте оба перестанем загромождать раздел комментариев. Jarmund 7 лет назад 0
Давайте [продолжим это обсуждение в чате] (http://chat.stackexchange.com/rooms/42707/discussion-between-josip-ivic-and-jarmund). Josip Ivic 7 лет назад 0
@JosipIvic - Эхо используется, чтобы показать, что между выводами нет никакой разницы, ваш собственный вопрос указывает на то, что между ними нет никаких различий. Я не понимаю, как это не может быть дубликатом этого вопроса. Ramhound 7 лет назад 0

1 ответ на вопрос

1
FUZxxl

В UNIX-подобных системах оболочка shразделяет то, что вы вводите, на слова и передает каждое слово отдельно в качестве аргумента программе или встроенной команде, на которую ссылается первое слово (само имя команды является нулевым аргументом). Упрощенно, слова разбиты на каждый пробел. Таким образом,

cd .. 

это два слова, но

cd.. 

только один. В cd..UNIX нет именованных команд, поэтому последняя не работает. Первый вызывает cdс единственным аргументом .., изменяя один каталог вверх. Для более сложного примера,

echo foo bar baz quux 

анализируются в четыре слова echo, foo, bar, baz, и quuxкоторые затем передаются в echoкоманду в качестве аргументов. Количество пробелов между ними теряется и echoбудет напечатано

foo bar baz quux 

так как он всегда вставляет один пробел между каждым аргументом.

В Windows, DOS и CP / M оболочка COMMAND.COMанализирует имя команды как самый длинный префикс из того, что вы набрали, пока не будет достигнут пробел или пунктуация (это тоже упрощение). Затем команда выполняется со всей строкой, введенной вами в качестве аргумента. Указатель указывает, где интерпретатор команды считает, что имя команды закончилось. COMMAND.COMне разбивает командную строку на аргументы, если программа хочет, чтобы это произошло, она должна сделать это сама.

Например, в cd ..оболочке решается, что cdэто имя команды, которая оказывается встроенной командой. Встроенная команда выполняется со строкой аргумента cd ..и информацией о том, что первые два символа образуют имя команды. Аналогично, cd..оболочка решает, что cdэто имя команды, и передается ..как имя операнда. Команда cdпропускает имя команды, удаляет остаток из пробела и затем пытается перейти в упомянутый каталог.

Аналогично для

echo foo bar baz quux 

оболочка вызывает echoкоманду с echo foo bar baz quuxаргументами и echoпечатает должным образом

foo bar baz quux 

Это причина, почему cd..работает в DOS, но не в UNIX.

Обе конструкции имеют свои плюсы и минусы, хотя стиль UNIX охватил почти все системы, так как программировать намного проще, поскольку только одна программа (оболочка) должна знать, как разбить командную строку на слова, в отличие от каждой программа, имеющая собственное домашнее решение.

-1 Как ответить вчера и сказать: «В Windows, DOS и CP / M оболочка COMMAND.COM анализирует имя команды». Последняя ОС Windows, где использовался command.com, была Windows 98. Вам около 18 лет. даты в вашем заявлении о Windows. В Windows XP были и cmd.exe, и command.com, но вы должны были использовать cmd.exe. В Windows 7 вообще нет command.com. И теперь компьютеры продаются с Windows 10. Вы даже больше не видите никого, кто использует Windows 98. Некоторые в Индии все еще используют XP, потому что для этого требуется меньше оперативной памяти, чем 7. В течение многих лет почти никто не использовал Win98. barlop 7 лет назад 0
@barlop Механизм все еще тот же в `cmd.exe`. Или вы думаете, что способ, которым процесс получает свою командную строку, изменился за последние годы? FUZxxl 7 лет назад 0
Могут быть некоторые незначительные различия в том, как cmd и command.com анализируют вещи, которые msdos, возможно, не имели в качестве escape-символа, хотя и не относятся к cd и `cd..`. Моим главным пунктом было просто название файла, используемого в настоящее время. barlop 7 лет назад 0
@barlop Тогда почему вы меня опровергаете? Это делает мой ответ менее правильным? Только понизить голос, когда ответ * неправильный. * Мой ответ неправильный? FUZxxl 7 лет назад 0
Я мог бы понизить голос, если я думаю, что что-то вводит в заблуждение, например предположить, что command.com все еще актуален barlop 7 лет назад 0
@ barlop Ну тогда позор тебе. Я не собираюсь менять этот ответ только потому, что вы думаете, что это не так. FUZxxl 7 лет назад 0
И помимо того, что ваш пост очень капризный, вы написали А) «командная оболочка COMMAND.COM анализирует имя команды как самый длинный префикс из того, что вы ввели, пока не будет достигнут пробел или пунктуация» и Б) «оболочка решает, что cd - это имя команды, которая является встроенной командой. " <--- Но мне кажется, что «А» верно только в случае встроенной команды. Если у вас есть файл blah.exe и вы выполняете `blah,` или `blah.exe,`, то команда не распознается. barlop 7 лет назад 0