cd..
не работает в Unix & Linux? Оболочки Unix обрабатывают множество не -буквенно-цифровых символов (, например,@_+-{}:,./~
)как если бы они были письмами, так что у вас могут быть команды с именами a@
, b_
, c+
, d-
и т. д. Поэтому, когда оболочка видит cd..
, она обрабатывает его как слово из четырех букв -, ничем не отличается от cdef
или cd56
, поэтому он ищет команду с именем cd..
. 1 Это не разбивает его на два слова просто потому, что d
— это буква, а.
— нет. (как это делает CMD; см. ниже ).
______________
1 Как указано Бодо , вы можете определить псевдоним (или функция оболочки (или скрипт оболочки ))с именем cd..
. Конечно, писать сценарий оболочки с именем cd..
— плохая идея. (или cdanything
), потому что сценарий оболочки не может вызвать оболочку, которая его вызывает. изменить каталог.
cd..
работает в CMD? Правила разбора команд CMD кажутся сложными и недостаточно документированными.
The parsing of a command line into a sequence of commands is complex, and varies subtly from command interpreter to command interpreter.
You'll get different results if you pass a command line to ShowParams.exe (written in C/C++), ShowParams.vbs (VBScript), or ShowParams.bat (batch file)…
… но (примерно за час поиска )я ничего не смог найти в котором конкретно рассматривается вопрос о том, как CMD определяет что это за команда (то есть то, что мы назвали бы argv[0]
в программе на C в Unix ).
Я провел несколько тестов / экспериментов (на Windows7 ). Одна закономерность, которую я заметил, заключается в том, чтопосле первого прохода токенизации (разрыв командной строки пробелами и символы высокого -приоритета, такие как <
, >
, &
, |
, ,
и /
), CMD смотрит на первое слово в командной строке, и разбивает его на некоторые другие не -буквенно-цифровые символы (, включая .
, +
, =
, и \
).
Если слово до первого такого не -буквенно-цифрового символа это встроенная команда, не принимающая аргументов, затем эта команда выполняется. Например, cls.
, cls..
, cls.abc
, cls.a.b.c
, cls.exe
, cls=
, cls=abc
, cls+
, cls+abc
, cls\
, cls\abc
, и многие другие вариации, действуйте как обычно cls
․и очистите экран. То же самое для pause
.
На первый взгляд они кажутся исключениями из вышеперечисленного:
cls/
и cls/a/b/c
выдают сообщение об ошибке. cls/?
отображает справочное сообщение. pause/
и pause/a/b/c
просто пауза (т. е. они действуют как обычныеpause
). pause/?
выдает справочное сообщение, в котором говорится: «Нажмите любую клавишу, чтобы продолжить...», но не ждет, пока вы нажмете клавишу. (Это ошибка.)Но вышеизложенное согласуется с идеей что CMD разбивает вещи на токены по /
символов. Например, cls/
ведет себя так же, как cls /
.
echo
это особый случай :echo on
включает эхо. echo off
выключает эхо. echo
сообщает о состоянии флага эха. echo
сразу следует не -буквенно-цифровой символ (как ,
, .
или /
), тогда этот символ игнорируется, но специальная обработка для остальной части команды отключается. Итак, если вы хотите напечатать слово "включено" или "выключено", используйте echo.on
или echo.off
, а для печати пустой строки используйте echo.
. Таким образом echo..
действует как echo .
[sic].cd..
, dir..
, type..\filename.txt
и copy..\filename newname
все действуют так, как будто перед первой точкой был пробел. Но это работает только для встроенных функций; например, calc..
и find..
получают «…не распознано как внутренняя или внешняя команда, исполняемая программа или пакетный файл». ошибка. Итак, несколько забавных примеров:
abcd.efg.exe
, вы можете запустить ее, набрав abcd.efg
. Но если он называется cd.efg.exe
, то cd.efg
не работает, потому что он анализируется как cd .efg
. Вам нужно будет ввести cd.efg.exe
. abcd
в текущем каталоге, и программа с именем efg.exe
в этом подкаталоге, вы можете запустить его, набрав abcd\efg
. Но если подкаталог называется cd
, то cd\efg
не работает, потому что он анализируется как cd \efg
. Вам нужно будет ввести cd\efg.exe
. У вас установлена LVM , поэтому после разблокировки устройства LUKS вам необходимо смонтировать корневой логический том, а не само разблокированное устройство. В вашем случае логические тома не были активированы автоматически -, потому что lvmetad
не работает, вы можете активировать их (= сказать системе, чтобы она фактически создала устройства блокировки логических томов )с помощью vgchange -ay elementary-vg
, а затем смонтировала корневой логический том /dev/elementary-vg/root
с помощью mount
или udisksctl mount -b /dev/elementary-vg/root
.