Подтвердить что ты не робот

Как записать cd в каталог с пробелом в имени?

Я пытаюсь попасть в каталог /cygdrive/c/Users/my dir/Documents:

$ DOCS="/cygdrive/c/Users/my\ dir/Documents"

$ echo $DOCS
/cygdrive/c/Users/my\ dir/Documents

$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my\: No such file or directory

$ cd /cygdrive/c/Users/my\ dir/Documents
(success)

Когда я набираю его вручную, backspace выполняет функцию escape-символа, но не тогда, когда я использую расширение параметра с помощью переменной DOCS.

Я пробовал другие варианты, такие как отсутствие обратной косой черты.

$ DOCS=/cygdrive/c/Users/Rahman\ dir/Documents

$ echo $DOCS
/cygdrive/c/Users/my dir/Documents

$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my: No such file or directory

или

$ DOCS="/cygdrive/c/Users/my dir/Documents"

$ echo $DOCS
/cygdrive/c/Users/my dir/Documents

$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my: No such file or directory

То же самое происходит с $HOME:

$ echo $HOME
/home/my dir

cd $HOME тоже не работает. Кавычки должны быть помещены вокруг этого.

Какого черта:

$ DOCS="\"/cygdrive/c/Users/my dir/Documents\""

$ echo $DOCS
"/cygdrive/c/Users/my dir/Documents"

$ cd $DOCS
-bash: cd: "/cygdrive/c/Users/my: No such file or directory
4b9b3361

Ответ 1

$ cd "$DOCS"

Вам нужно процитировать "$DOCS", чтобы предотвратить разбор пространств как разделителей слов. Чаще всего не следует указывать ссылки на переменные.

Обратите внимание, что $HOME будет иметь одинаковую проблему. Проблема возникает, когда оболочка оценивает ссылки на переменные; это не имеет никакого отношения к тем, какие переменные вы используете или как вы их назначаете. Это расширение, которое нужно процитировать.

$ echo $HOME
/home/my dir

Это обманчиво. echo на самом деле повторяет две строки /home/my и dir. Если вы используете cd или ls, вы увидите, как он работает.

$ ls $HOME
ls: cannot access /home/my: No such file or directory
ls: cannot access dir: No such file or directory
$ cd $HOME
bash: cd: /home/my: No such file or directory
$ cd "$HOME"
<success!>

Могу ли я спросить, почему это работает, когда я вручную ввожу его, но не в переменную?

Отличный вопрос! Давайте рассмотрим команды, которые вы набрали:

$ DOCS="\"/cygdrive/c/Users/my dir/Documents\""
$ echo $DOCS
"/cygdrive/c/Users/my dir/Documents"
$ cd $DOCS
-bash: cd: "/cygdrive/c/Users/my: No such file or directory

Причина, по которой это не работает, состоит в том, что Bash не анализирует кавычки во внутренних разложениях. Он выполняет разбиение слов, поэтому пробелы в разметках без кавычек принимаются как разделители слов. Он не анализирует кавычки каким-либо образом, то есть вы не можете поместить двойные кавычки внутри переменной, чтобы переопределить расщепление слов.

$ cd $DOCS

Из-за этого cd передается два параметра. Насколько известно cd, похоже, что вы написали:

$ cd '"/cygdrive/c/Users/my' 'dir/Documents"'

Два параметра без двойных кавычек.

Ответ 2

РЕШЕНИЕ:

cd "Documents and Photos"

проблема решена.

Причина, по которой я отправляю этот ответ, заключается в том, что вы обнаружите, что StackOverflow используется каждым пользователем (а не только веб-разработчиками, программистами или опытными пользователями), и это был результат номер один для простого вопроса пользователя Windows Google.

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

Ответ 3

$ DOCS="/cygdrive/c/Users/my\ dir/Documents"

Вот ваша первая проблема. Это помещает фактический символ обратной косой черты в $DOCS, как вы можете видеть, выполнив эту команду:

$ echo "$DOCS"
/cygdrive/c/Users/my\ `

При определении DOCS вам нужно избежать символа пробела. Вы можете процитировать строку (используя одиночные или двойные кавычки), или вы можете избежать только символа пробела с помощью обратного слэша. Вы не можете обойти оба. (В большинстве Unix-подобных систем вы можете иметь обратную косую черту в имени файла или каталога, хотя это не очень хорошая идея. В Cygwin или Windows, \ является разделителем каталогов. Но я собираюсь принять фактическое имя каталога my dir, а не my\ dir.)

$ cd $DOCS

Это передает два аргумента cd. Первый - cygdrive/c/Users/my\, а второй - dir/Documents. Бывает, что cd спокойно игнорирует все, кроме первого аргумента, что объясняет сообщение об ошибке:

-bash: cd: /cygdrive/c/Users/my\: No such file or directory

Чтобы установить $DOCS имя вашего каталога Documents, выполните одно из следующих действий:

$ DOCS="/cygdrive/c/Users/my dir/Documents"
$ DOCS='/cygdrive/c/Users/my dir/Documents'
$ DOCS=/cygdrive/c/Users/my\ dir/Documents

Как только вы это сделали, чтобы перейти в каталог Documents, заключите ссылку на переменные в двойные кавычки (это хорошая идея для любой ссылки на переменные в bash, если вы не уверены, что значение не есть забавные персонажи):

$ cd "$DOCS"

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

Ответ 4

Почему бы не поместить следующее в .cshrc (или .bashrc или что-то из вашей оболочки по умолчанию):

alias mydoc 'cd "/cygdrive/c/Users/my dir/Documents"'

В первый раз, когда вы это делаете, вы должны сделать

source .cshrc

чтобы обновить оболочку с помощью этого нового псевдонима, вы можете ввести

mydoc

в любое время, когда вы хотите cd в свой каталог.

Лень - мать изобретения...

Ответ 5

Если вы хотите перейти от c:\ и хотите перейти на c:\Documents and settings, напишите на консоли: c:\Documents\[space]+tab и cygwin автоматически закроет его как c:\Documents\ and\ settings/

Ответ 6

попробуйте

DOCS="/cygdrive/c/Users/my\ dir/Documents";

cd "$DOCS"

Ответ 7

ok Я потратил некоторое разочаровывающее время на эту проблему. Мой маленький гид.

Откройте рабочий стол, например. Если вы не переключили свой диск в cmd, введите:

рабочий стол cd

Теперь, если вы хотите отобразить подпапки:

cd, сделайте 1 пробел и нажмите вкладка 2 раза

Теперь, если вы хотите ввести каталог/файл с ПРОБЕЛОМ NAME. Давайте откроем некоторое имя файла f.g., чтобы открыть его, нам нужно ввести:

cd файл\имя

p.s. обратите внимание на это пространство после слэша:)

Ответ 8

Используйте символ обратной косой черты, чтобы выйти из пробела

C:\> cd my folder

будет

 C:\> cd my\folder 

Ответ 9

МЕТОД 1: с цитатами

cd "C: /Prgram Files (x86)"

cd 'C: /Program Files (x86)'

обобщенный

cd 'Folder Path'

Метод 2: без использования кавычек

cd Program\ Files \(x86\)

Обобщенный Когда мы хотим пропустить следующий символ, мы используем черный слэш \.

По вышеуказанному вопросу: cd/cygdrive/c/Users/my\ dir/Documents

Ответ 10

У Cygwin есть проблема с распознаванием пробела между именами ПК. Таким образом, чтобы решить эту проблему, вы должны использовать "\" после первого слова, затем включить пробел, а затем фамилию.

такие как ".../my\dir/"

$ cd /cygdrive/c/Users/my\ dir/Documents

Еще один интересный и простой способ сделать это, заключить каталог в кавычки ("")

например, запустите его следующим образом:

$ cd c:
$ cd Users
$ cd "my dir"
$ cd Documents

Надеюсь, что это работает?

Ответ 11

В качестве альтернативы использованию кавычек, для каталога, в который вы хотите часто заходить, вы можете использовать опцию оболочки cdable_vars:

shopt -s cdable_vars
docs='/cygdrive/c/Users/my dir/Documents'

Теперь, чтобы перейти в этот каталог из любого места, вы можете использовать

cd docs

и оболочка укажет на какой каталог она изменилась:

$ cd docs
/cygdrive/c/Users/my dir/Documents

Ответ 12

Вместо:

DOCS="/cygdrive/c/Users/my\ dir/Documents"

Пытаться:

DOCS="/cygdrive/c/Users/my dir/Documents" 

Это должно работать на любой системе POSIX.