Как перейти в каталог с именем, начинающимся с «-» (минус)?
10
У нас есть несколько папок, имена которых начинаются с "-". Если я пытаюсь ввести их с терминала, cdинтерпретирует «-» как вариант. Как я мог справиться с этим?
Было бы разумно избегать таких символов в именах каталогов / папок.
Mindwin
Не могли бы вы просто сделать cd '-my-directory'?
OldBunny2800
@ oldbunny2800 Вы пробовали это?
холме
1
@ OldBunny2800 Нет. Кавычки не позволяют оболочке обрабатывать символы отдельно; Строки, начинающиеся с дефисов, обрабатываются как параметры (или нет) командой, которая получает аргументы, независимо от того, как эти строки были представлены в оболочке.
chepner
1
@patrix Я сделал сразу после того, как опубликовал комментарий, затем отвлекся на другие терминальные махинации, затем забыл о своем комментарии. :) Чепнер Оооо, это имеет больше смысла.
OldBunny2800
Ответы:
20
Это должно просто работать:
cd /path/to/-folderthatstartswithdash
РЕДАКТИРОВАТЬ :
Согласно этому вопросу , это работает, если вы хотите ввести только имя:
--Метод правильный ответ ... он будет работать с большинством стандартных утилит , которые принимают имя файла в качестве аргумента , и избавляет от необходимости полностью определить путь.
Кайтар
--Метод работает как «Отключает» аргумент разбор.
Тони Уильямс
3
Почему ограничение «если вы хотите только ввести имя»? Если вам нужно больше аргументов, просто поставьте их перед --.
Федерико Полони
@FedericoPoloni Я просто говорю, что если вам не нужен полный путь, вы можете использовать этот. Все остальные аргументы должны идти до -.
Том Шен
19
cd ./-folder
обычно работает довольно хорошо здесь (а также с другими командами)
Хорошая особенность этого решения в том, что оно работает с любой программой или командой, а не только с «cd»; это не зависит от команды или программы, имеющей какое-либо специальное поведение, например "-", чтобы изменить интерпретацию последующих аргументов.
Почему это работает? Как утилита узнает разницу? Заключение в кавычки выполняется оболочкой, в конце концов, массив аргументов, который получает утилита, будет в любом случае одинаковым . Я признаю, что я не пробовал ваше решение, но из того, что я мало знаю об оболочках, кажется довольно очевидным, что это не может сработать.
Йорг Миттаг
Это должно работать на Windows IIRC, и это то, о чем я думал в первую очередь, но я могу подтвердить, что на Mac это не работает.
Cullub
2
Если это работает в Windows, это только потому, что модель командной строки Windows совершенно нелепа и непоследовательна. Или просто потому, что команды Windows не рассматриваются -как символы опции. Но цитирование не может изменить это поведение.
cd '-my-directory'
?Ответы:
Это должно просто работать:
РЕДАКТИРОВАТЬ :
Согласно этому вопросу , это работает, если вы хотите ввести только имя:
источник
--
Метод правильный ответ ... он будет работать с большинством стандартных утилит , которые принимают имя файла в качестве аргумента , и избавляет от необходимости полностью определить путь.--
Метод работает как «Отключает» аргумент разбор.--
.обычно работает довольно хорошо здесь (а также с другими командами)
источник
Ввод имени в кавычки должно работать.
источник
-
как символы опции. Но цитирование не может изменить это поведение.