У меня есть каталог с именем:
-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, поэтому их необходимо экранировать, чтобы оболочка не интерпретировала их как перенаправления.