Почему на терминалах Linux не работает cd..?

Эта строка

/dev/root on / type squashfs (ro,relatime)

говорит, что ваша файловая система смонтирована -только для чтения (ro ). Все остальные монтирования являются временными (, а не «настоящими» файловыми системами ). Накладного крепления нет.

Это означает, что вы не можете ничего изменить в своей файловой системе.

Единственное, что вы можете сделать, это получить копию прошивки (или , извлечь ее ), изменить ее на каком-то другом ПК так, как вы хотите, и загрузил измененную прошивку через u -boot.

Чтобы опробовать изменения, можно временно подключить некоторые другие устройства, возможно, по сети, в зависимости от того, что поддерживает установленное ядро ​​и оборудование.

В общем и целом, просто добавить логотип компании очень сложно, и вам все равно придется потратить много времени, чтобы заставить его работать, если вы впервые смотрите на встраиваемые устройства. И нет, я не могу дать пошаговую -по -пошаговую инструкцию, это действительно зависит от того, что именно стоит на устройстве.

1
07.02.2020, 18:16
3 ответа

На самом деле разницы нет. Оболочка Windows CMD решила исправить опечатку, в то время как оболочки Linux более строго относятся к отделению команды или программы (, в данном случае оболочка встроена -в cd )от аргумента.

6
20.08.2021, 10:57

Обычный синтаксис cd... Интерпретатор команд Windows немного более гибкий и также принимает cd...

При использовании cd..оболочка пытается найти команду или программу с точным именемcd..

Чтобы ваш bashпринимал команду cd.., вы можете определить псевдоним:

alias cd..="cd.."
9
20.08.2021, 10:57

Почему cd..не работает в Unix & Linux?

Оболочки Unix обрабатывают множество не -буквенно-цифровых символов (, например,@_+-{}:,./~)как если бы они были письмами, так что у вас могут быть команды с именами a@,  b_,  c+,  d- и т. д. Поэтому, когда оболочка видит cd.., она обрабатывает его как слово из четырех букв -, ничем не отличается от cdef или  cd56, поэтому он ищет команду с именем cd... 1 Это не разбивает его на два слова просто потому, что d— это буква, а.— нет. (как это делает CMD; см. ниже ).
______________
1  Как указано Бодо , вы можете определить псевдоним (или функция оболочки (или скрипт оболочки ))с именем cd... Конечно, писать сценарий оболочки с именем cd..— плохая идея. (или cdanything), потому что сценарий оболочки не может вызвать оболочку, которая его вызывает. изменить каталог.

Почему cd..работает в CMD?

Правила разбора команд CMD кажутся сложными и недостаточно документированными.

… но (примерно за час поиска )я ничего не смог найти в котором конкретно рассматривается вопрос о том, как 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].
  • TL;DR
    В других случаях CMD, кажется, ищет последнюю точку. (или группа точек ), и если эта подстрока является встроенной командой, он интерпретирует это как встроенную команду. Итак, 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.
4
20.08.2021, 10:57

Теги

Похожие вопросы