Вопрос: Как записать в каталог с этим именем «-2» (начиная с дефиса)?


У меня есть каталог с именем:

-2

Я хочу записать в него CD, но CD жалуется:

bash: cd: -2: invalid option

Без успеха я попытался:

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

Любое решение?

Изменить: на сервере не доступны никакие файловые браузеры, такие как mc и т. Д.


146
2018-01-03 20:29


Источник


Связанный вопрос о суперпользователе: superuser.com/questions/361573/... - yms


Ответы:


Как минимум два способа:

  1. Использовать -- аргумент.

    cd -- -2
    

    Это использует конвенцию, общую для инструментов GNU, которая не должна обрабатывать ничего, что появляется после -- как вариант командной строки.

    Как комментатора отметил, что это соглашение также определенных в стандарте POSIX:

    Поведение по умолчанию: Когда этот раздел указан как «Нет», это означает, что реализация не должна поддерживать какие-либо параметры. Стандартные утилиты, которые не принимают параметры, но которые принимают операнды, должны признать "--" как первый аргумент, который нужно отбросить.

    Требование о признании "--" поскольку соответствующие приложения нуждаются в способе защиты своих операндов от любых произвольных вариантов, которые реализация может предоставить в качестве расширения. Например, если стандартная утилита foo указана как не принимающая никаких параметров, и приложение должно было дать ей путь с ведущим дефисом, это можно было бы безопасно сделать так:

    foo -- -myfile
    

    и избегать любых проблем с -m используется как расширение.

    так же как:

    Руководящий принцип 10:
      Аргумент -- должен быть принят как разделитель, указывающий конец опций. Любые последующие аргументы следует рассматривать как операнды, даже если они начинаются с '-' персонаж. -- аргумент не должен использоваться как опция или как операнд.

  2. Укажите путь явно:

    cd ./-2
    

    Это указывает путь, явно называя текущий каталог (.) в качестве отправной точки.

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

    Это вариации вышеизложенного. Любое количество таких изменений может быть возможным; Я оставлю это как упражнение для читателя, чтобы обнаружить их все.


243
2018-01-03 20:32



Это не просто GNU, это часть стандарта POSIX. Видеть 1.11 Описание утилиты По умолчанию а также 12.2 Рекомендации по синтаксису служебных программ (руководство № 10). Из cd страница « cd утилита должна соответствовать ... разделу 12.2 ". - Dietrich Epp
Теперь мне просто интересно узнать, как cd в каталог с именем -! - sergiol
@sergiol Точно так же. - Michael Hampton♦
@ArtB: Нет. Котировка просто влияет на разделение поля. Так "hello world" является одним из аргументов, но hello world два, и "-2" такой же как -2, - Dietrich Epp
@sergiol: Либо cd -- -- или cd ./-- должно сработать. - Keith Thompson


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

cd -- -2 

- означает больше не вариант


47
2018-01-03 20:33





Это будет работать, если «-2» находится в текущем каталоге.

    cd ./-2

Вы можете автозаполнять, набрав - и нажав вкладку.


25
2018-01-04 06:19





cd /home/...../-2 также работает. Дайте полный путь доступа.


10
2018-01-04 02:46





Для дополнения, если вы хотите удалить / удалить этот каталог, вы можете использовать следующую команду:

rm -r -- -2

6
2018-01-04 14:14





Я знаю, что на этот вопрос уже был дан ответ. Если у кого-то есть такая ситуация, как у меня, это для них:

Я запустил приложение java, и он искал каталог, начиная с <path>, Я должен был заменить это правильным путем перед запуском приложения. Однако я забыл это сделать. Приложение создало каталог, называемый <path>,

Я попытался cd <path> - дал мне ошибку "-bash: синтаксическая ошибка около неожиданной токены newline" Исходя из предложения здесь (я понимаю, что его для каталога, начиная с - и не <), я попробовал cd -- <path>, Однако я получил ту же ошибку.

Когда я попробовал cd \<path>\ - это сработало!

Исходная информация:

Символы «<» и «>» используются для перенаправления STDIN и STDOUT, поэтому их необходимо экранировать, чтобы оболочка не интерпретировала их как перенаправления.


-1
2017-07-05 14:00