Как перейти в каталог с именем, начинающимся с «-» (минус)?

10

У нас есть несколько папок, имена которых начинаются с "-". Если я пытаюсь ввести их с терминала, cdинтерпретирует «-» как вариант. Как я мог справиться с этим?

cfritz
источник
1
Было бы разумно избегать таких символов в именах каталогов / папок.
Mindwin
Не могли бы вы просто сделать cd '-my-directory'?
OldBunny2800
@ oldbunny2800 Вы пробовали это?
холме
1
@ OldBunny2800 Нет. Кавычки не позволяют оболочке обрабатывать символы отдельно; Строки, начинающиеся с дефисов, обрабатываются как параметры (или нет) командой, которая получает аргументы, независимо от того, как эти строки были представлены в оболочке.
chepner
1
@patrix Я сделал сразу после того, как опубликовал комментарий, затем отвлекся на другие терминальные махинации, затем забыл о своем комментарии. :) Чепнер Оооо, это имеет больше смысла.
OldBunny2800

Ответы:

20

Это должно просто работать:

cd /path/to/-folderthatstartswithdash

РЕДАКТИРОВАТЬ :

Согласно этому вопросу , это работает, если вы хотите ввести только имя:

cd -- -folderthatstartswithdash
Том Шен
источник
5
--Метод правильный ответ ... он будет работать с большинством стандартных утилит , которые принимают имя файла в качестве аргумента , и избавляет от необходимости полностью определить путь.
Кайтар
--Метод работает как «Отключает» аргумент разбор.
Тони Уильямс
3
Почему ограничение «если вы хотите только ввести имя»? Если вам нужно больше аргументов, просто поставьте их перед --.
Федерико Полони
@FedericoPoloni Я просто говорю, что если вам не нужен полный путь, вы можете использовать этот. Все остальные аргументы должны идти до -.
Том Шен
19
cd ./-folder

обычно работает довольно хорошо здесь (а также с другими командами)

Nohillside
источник
Хорошая особенность этого решения в том, что оно работает с любой программой или командой, а не только с «cd»; это не зависит от команды или программы, имеющей какое-либо специальное поведение, например "-", чтобы изменить интерпретацию последующих аргументов.
Ларри
-5

Ввод имени в кавычки должно работать.

user229882
источник
3
Почему это работает? Как утилита узнает разницу? Заключение в кавычки выполняется оболочкой, в конце концов, массив аргументов, который получает утилита, будет в любом случае одинаковым . Я признаю, что я не пробовал ваше решение, но из того, что я мало знаю об оболочках, кажется довольно очевидным, что это не может сработать.
Йорг Миттаг
Это должно работать на Windows IIRC, и это то, о чем я думал в первую очередь, но я могу подтвердить, что на Mac это не работает.
Cullub
2
Если это работает в Windows, это только потому, что модель командной строки Windows совершенно нелепа и непоследовательна. Или просто потому, что команды Windows не рассматриваются -как символы опции. Но цитирование не может изменить это поведение.
R .. GitHub ОСТАНОВИТЬСЯ, ПОМОГАЯ ЛЬДУ