Як CD в каталог з ім'ям, що містить пробіли в bash?


84

я намагався 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

Відповіді:


113

Ви можете скористатися Tabклавішею після натискання перших кількох символів (це потім "заповнить" решту папки для вас, наприклад, введіть cd ~/LTabзаливки, cd ~/Library/а потім введіть, ApTabа решту ви заповніть для вас.

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


Чутливий до регістру шлях чи нечутливий? Я можу отримати доступ до бібліотеки за допомогою cd ~ / library, але метод вкладки не працюватиме, якщо я помилився з випадком.
colinfang

@colinfang OS X не чутливий до регістру, але зберігає регістр. Оболонка bash повинна бути трохи більш розбірливою, коли мова йде про автозаповнення.
NReilingh

@NReilingh - Ага, THX.
colinfang

1
@colinfang: Ви можете використовувати shopt -s nocaseglobта bind 'set completion-ignore-case on'робити башти менш чутливими до справи.
Кріс Джонсен

2
colinfang - для нечутливого до випадку вкладки з сумісністю bash спробуйте "zsh". Крім того, підписання цієї оболонки в якості підстановки дуже добре.
Ɱark Ƭ

27

Основна проблема тут полягає в тому, як оболонка ( 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 Tabcd ~/Library/; ap Tabcd ~/Library/Application\ Support/


приємна відповідь @Chris. Як ви змусили символів Tab виглядати як ключі?
robzolkos

4
@RobZ: Це <kbd></kbd>тег HTML (один із декількох тегів HTML, підтримуваних у розмітці SE ).
Кріс Джонсен

9

Коли ви двічі цитуєте шлях, ви зупиняєте розширення тильди. Отже, є кілька способів зробити це:

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

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

cd "$HOME/My Code"

Ви можете розширити змінні середовища всередині дворядкових рядків; це в основному те, що робить розширення тильди

cd ~/My\ Code

Також ви можете уникати спеціальних символів (наприклад, пробіл) за допомогою нахилу вниз.


9

Ви також можете просто перетягнути папку до вікна терміналу, і весь шлях до файлу / папки буде автоматично вставлений під час перетягування.


4

Вам потрібно уникнути місця в " Application Support"

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


0

Якщо нормальні способи не працюють, спробуйте замінити пробіли %20.

Це працювало для мене під час роботи з SSH та іншими командами доменного стилю auto_smb.


0

Ви можете спробувати це для розміщених папок / файлів, якщо ім'я файлу чи папки містить 1) ім'я файлу.extension командою має бути cd ~ / file \ name.extension / (або) cd ~ / "name file.extension" /


1
Як ця відповідь відрізняється чи покращується від будь-якого іншого, подібного, відповіді?
fsb

Його ідеальний термінальний синтаксис для визначення простору та надання лапок є одним із визначених користувачем, а також за допомогою клавіші табуляції не приймає імені, як 1) ім'я файлу.ext 2) ім'я файлу.ext Під час натискання вкладки для цього типу імені автоматично завершення слів відображається до "файлу" в той час, ми можемо використовувати цю звороту косу рису для визначення місця в терміналі. @fsp
prasanth sivanesan

Вся ця інформація повинна міститись у відповіді, щоб показати читачам, чим вона відрізняється від 9 інших відповідей, включаючи прийнятий відповідь.
fsb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.