У меня есть каталог с именем:
-2
Я хочу, чтобы CD в него, но CD жалуется:
bash: cd: -2: invalid option
Безуспешно я пытался:
cd "-2"
cd '-2'
cd \-2
Любое решение?
Изменить: на сервере нет файловых браузеров, таких как mc и т. Д.
У меня есть каталог с именем:
-2
Я хочу, чтобы CD в него, но CD жалуется:
bash: cd: -2: invalid option
Безуспешно я пытался:
cd "-2"
cd '-2'
cd \-2
Любое решение?
Изменить: на сервере нет файловых браузеров, таких как mc и т. Д.
Ответы:
Как минимум двумя способами:
Используйте --аргумент.
cd -- -2
При этом используется соглашение, общее для инструментов GNU, которое состоит в том, чтобы не обрабатывать все, что появляется после, --как параметр командной строки.
Как заметил комментатор , это соглашение также определено в стандарте POSIX :
Поведение по умолчанию: если этот раздел указан как «Нет», это означает, что реализация не должна поддерживать какие-либо параметры. Стандартные утилиты, которые не принимают параметры, но принимают операнды, должны распознавать
"--"в качестве первого аргумента, который должен быть отброшен.Требование распознавания
"--"заключается в том, что соответствующим приложениям нужен способ защитить свои операнды от любых произвольных опций, которые реализация может предоставить в качестве расширения. Например, если стандартная утилита foo указана как не имеющая опций, и приложению необходимо указать ей путь с начальным дефисом, она смело может сделать это следующим образом:foo -- -myfileи избегайте проблем с использованием -m как расширения.
а также :
Принцип 10:
Аргумент--должен быть принят в качестве разделителя, указывающего конец опций. Любые последующие аргументы должны рассматриваться как операнды, даже если они начинаются с'-'символа.--Аргумент не должен использоваться в качестве опции или в качестве операнда.
Укажите путь явно:
cd ./-2
Это указывает путь, явно указывающий текущий каталог ( .) в качестве отправной точки.
cd $(pwd)/-2
cd /absolute/path/to/-2
Это вариации на выше. Любое количество таких изменений может быть возможным; Я оставлю это в качестве упражнения для читателя, чтобы узнать все из них.
cdстраницы « cdУтилита должна соответствовать ... разделу 12.2».
"hello world"это один аргумент, но hello worldэто два, и "-2"это то же самое, что и -2.
cd -- --или cd ./--должно работать.
Это должно работать:
cd -- -2
- значит больше нет варианта
Просто для дополнения, если вы хотите удалить / удалить этот каталог, вы можете использовать следующую команду:
rm -r -- -2
Я знаю, что на этот вопрос уже был дан ответ. Если у кого-то есть ситуация, подобная моей, это для них:
Я запустил приложение Java, и он искал каталог, начинающийся с <path>, я должен был заменить его на правильный путь перед запуском приложения. Однако я забыл это сделать. Приложение создало каталог с именем <path>.
Я попытался cd <path>- дал мне ошибку "-bash: синтаксическая ошибка рядом с неожиданной новой строкой токена" На основе предложенного здесь (я понимаю, что для каталога, начинающегося с - и не <), я попытался cd -- <path>. Однако я получил ту же ошибку.
Когда я попробовал cd \<path>\- это сработало!
Исходная информация:
Символы «<» и «>» используются для перенаправления STDIN и STDOUT, поэтому их необходимо экранировать, чтобы оболочка не интерпретировала их как перенаправления.