Як записатись у каталог із такою назвою “-2” (починаючи з дефісу)?


169

У мене є каталог з іменем:

-2

Я хочу вписати в нього, але компакт-диск скаржиться:

bash: cd: -2: invalid option

Не маючи успіху, я намагався:

cd "-2"
cd '-2'
cd \-2

Будь-яке рішення?

Редагувати: на сервері відсутні браузерні файли, такі як mc тощо.


2
Питання, пов’язані з
суперусером

Відповіді:


272

Принаймні двома способами:

  1. Використовуйте --аргумент.

    cd -- -2
    

    Для цього використовується умова, загальна для інструментів GNU, яка полягає в тому, щоб не розглядати нічого, що з’являється після, --як варіант командного рядка.

    Як зазначив коментатор , ця конвенція також визначена в стандарті POSIX :

    Поведінка за замовчуванням: Коли цей розділ вказаний як "Немає", це означає, що для реалізації не потрібно підтримувати жодних параметрів. Стандартні утиліти, які не приймають опції, але приймають операнди, повинні визнати "--"першим аргументом, який слід відкинути.

    Вимога розпізнавання "--"полягає в тому, що відповідним програмам потрібен спосіб захистити свої операнди від будь-яких довільних варіантів, які реалізація може надавати як розширення. Наприклад, якщо в стандартному foo утиліті вказано, що він не має жодних параметрів, і програмі, яка потрібна для того, щоб дати йому ім'я шляху з провідним дефісом, він може сміливо робити це як:

    foo -- -myfile
    

    і уникати будь-яких проблем із -m, що використовується як розширення.

    а також :

    Настанова 10:
    Аргумент --слід сприймати як роздільник, що вказує на кінець варіантів. Будь-які наступні аргументи слід розглядати як операнди, навіть якщо вони починаються з '-'символу. --Аргумент не повинен використовуватися в якості опції або в якості операнда.

  2. Вкажіть шлях прямо:

    cd ./-2
    

    Це визначає шлях, явно називаючи поточний каталог ( .) вихідною точкою.

    cd $(pwd)/-2
    cd /absolute/path/to/-2
    

    Це варіації вище. Будь-яка кількість таких варіантів може бути можливою; Я залишу це як вправу для читача, щоб розкрити їх усі.


23
Це не лише GNU, це частина стандарту POSIX. Див. 1.11 Опис утиліти за замовчуванням та 12.2 Посібник із синтаксису утиліти (керівництво №10). Зі cdсторінки " cdУтиліта повинна відповідати ... розділу 12.2".
Дітріх Епп

Тепер мені просто цікаво, як CD в каталог з назвою -!
серхіол

2
@sergiol Точно так само.
Майкл Хемптон

1
@ArtB: Ні. Цитування лише впливає на розбиття поля. Так "hello world"є один аргумент, але hello worldце два, і "-2"це те саме, що -2.
Дітріх Епп

1
@sergiol: Або cd -- --чи cd ./--повинен працювати.
Кіт Томпсон


26

Це буде працювати, якщо '-2' знаходиться у поточному каталозі.

    cd ./-2

Ви можете автозавершити, ввівши - та натиснувши вкладку.


11

cd /home/...../-2 також працює. Дайте повний шлях до доступу.


7

Просто для доповнення, якщо ви хочете видалити / видалити цей каталог, ви можете скористатися такою командою:

rm -r -- -2

... і просто для доповнення я ніколи цього не роблю, скоріше я використовуватиму такий графічний інструмент, як mc, або перейменую каталог спочатку.
Нік

-1

Я знаю, на це питання вже відповіли. Якщо у когось є така ситуація, як у мене, це для них:

Я запустив додаток java, і він шукав каталог, починаючи з цього <path>, я повинен був замінити його правильним шляхом перед запуском програми. Однак я це забув зробити. Додаток створив каталог з назвою <path>.

Я спробував cd <path>- дав мені помилку "-bash: синтаксична помилка поблизу несподіваного нового лексеми" На основі запропонованої тут пропозиції (я розумію, що її для каталогу, починаючи з - а не <), я спробував cd -- <path>. Однак я отримав ту саму помилку.

Коли я спробував cd \<path>\- це спрацювало!

Довідкова інформація:

Символи "<" і ">" використовуються для перенаправлення STDIN і STDOUT, тому їх потрібно уникати, щоб оболонка не інтерпретувала їх як переадресації.

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