Как cd в каталог с именем, содержащим пробелы в bash?

Я попробовал cd "~/Library/Application Support/" -bash: cd: ~/Library/Application Support/: No such file or directory

также cd ~/Library/Application Support/ -bash: cd: ~/Library/Application Support/: No such file or directory

71 голос | спросил colinfang 24 Mayam11 2011, 06:33:53

7 ответов


98

Вы можете использовать клавишу Tab после нажатия первых нескольких символов (это будет «заполнять» остальную часть папки, например, введите cd ~/L вкладка заполняет cd ~/Library/, затем введите Ap Tab , и она заполнит остальное для вас.

Если между словами есть пробел, и вы не хотите использовать вышеприведенные методы, поставьте \ (обратная косая черта) перед пробелом, например. cd ~/Library/Application\ Support.

ответил robzolkos 24 Mayam11 2011, 07:18:31
25

Основной проблемой здесь является то, как кавычки оболочки ( bash ) цитирует и как это влияет на расширение тильды и разделение на «слова» (аргументы для запуска программы).

bash обрабатывает только лидирующую тильду, если она не цитируется. Кроме того, также не следует указывать следующую косую черту.

В то же время bash анализирует командные строки в словах на основе нецитированных пробелов. Для команды cd требуется только один аргумент (целевой каталог). Командная строка, такая как cd foo bar, означает запуск cd с двумя аргументами: foo и bar. Если вы хотите отправить только один аргумент foo bar, вам нужно указать пробел:
(например) cd foo\ bar (см. пример ниже).

В вашей конкретной ситуации вам нужно оставить тильду и следующую косую черту без кавычек, указав пробел в имени каталога. Ваша пробная версия cd "~/Library/Application Support/" заканчивается слишком много цитирования (тильда и ее косая черта), а ваша пробная версия cd ~/Library/Application Support/ слишком мало кавычек (он опускает пробел в имени каталога).

Наиболее распространенным решением является использование односимвольного экранирования для цитирования только пробела:

    cd ~/Library/Application\ Support

Вы также можете использовать одинарные или двойные кавычки вокруг просто пробела или пробела и некоторых других битов этого аргумента (но не ~/!):

    cd ~/Library/Application' 'Support
    cd ~/Library/Application" "Support
    cd ~/Library/App'lication 'Support
    cd ~/Library/Application" Supp"ort
    cd ~/'Library/Application 'Support
    cd ~/"Library/Application "Support

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

Часто вы можете просто позволить оболочке выполнить эту работу за вас.

  • Глобус (подстановочные знаки):

    cd ~/L*/Ap*
    

    Вы можете использовать shopt -s nocaseglob, чтобы сделать регистр нечувствительным к регистру:

    cd ~/l*/ap*
    
  • Завершение:

    Нажатие Tab после ввода cd ~/L, вероятно, расширит его до cd ~/Library/.
    Повторное нажатие Tab после ввода Ap (теперь у вас есть cd ~/Library/Ap)), вероятно, расширит его до cd ~/Library/Application\ Support/ (оболочка автоматически вставила обратную косую черту).

    Вы можете использовать bind 'set completion-ignore-case on', чтобы сделать регистр нечувствительным:

    cd ~/l вкладка cd ~/Library/; ap Вкладка cd ~/Library/Application\ Support/

ответил Chris Johnsen 24 Mayam11 2011, 09:18:00
9

Когда вы дважды указываете путь, вы останавливаете расширение тильды. Итак, есть несколько способов сделать это:

cd ~/"My Code"
cd ~/'My Code'

Тильда здесь не цитируется, поэтому расширение тильды все равно будет запущено.

cd "$HOME/My Code"

Вы можете развернуть переменные среды внутри строк с двойными кавычками; это в основном то, что делает расширение тильды.

cd ~/My\ Code

Вы также можете избежать специальных символов (например, пробела) с обратным слэшем.

ответил useralone 7 PM00000090000001231 2012, 21:53:12
8

Вы также можете просто перетащить папку в окно терминала, полный путь к файлу /папке будет автоматически вставлен при перетаскивании.

ответил Psychic2k 24 Maypm11 2011, 17:54:55
3

Вам нужно освободить место в «Application Support"

Попробуйте $ cd ~/Library/Application\ Support/

ответил NReilingh 24 Mayam11 2011, 07:18:41
0

Если обычные способы не работают, попробуйте заменить пробелы на %20.

Это работало для меня при работе с SSH и другими командами типа домена, такими как auto_smb.

ответил atwixtor 2 PMpThu, 02 Apr 2015 20:14:33 +030014Thursday 2015, 20:14:33
0

Вы можете попробовать это для разнесенных папок /файлов с помощью Если имя файла или папки содержит 1) файл name.extension команда должна быть cd ~ /file \ name.extension /(или) cd ~ /"file name.extension" /

ответил prasanth sivanesan 23 Maypm17 2017, 15:58:29

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132