¿Cómo crear un CD en un directorio con este nombre "-2" (comenzando con el guión)?

169

Tengo un directorio llamado:

-2

Quiero cd en él pero el cd se queja:

bash: cd: -2: invalid option

Sin éxito, he intentado:

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

¿Alguna solución?

Editar: no hay navegadores de archivos como mc, etc. disponibles en el servidor.

usuario151851
fuente
2
Pregunta relacionada sobre superusuario: superusuario.com/questions/361573/…
yms

Respuestas:

272

Al menos dos formas:

  1. Usa el --argumento.

    cd -- -2
    

    Esto usa una convención común a las herramientas GNU que es no tratar nada que aparezca después --como una opción de línea de comando.

    Como señaló un comentarista , esta convención también se define en el estándar POSIX :

    Comportamiento predeterminado: cuando esta sección se enumera como "Ninguna", significa que la implementación no necesita admitir ninguna opción. Las utilidades estándar que no aceptan opciones, pero que aceptan operandos, se reconocerán "--"como un primer argumento a descartar.

    El requisito para reconocer "--"es porque las aplicaciones conformes necesitan una forma de proteger sus operandos de cualquier opción arbitraria que la implementación pueda proporcionar como una extensión. Por ejemplo, si la utilidad estándar foo aparece como sin opciones, y la aplicación necesita darle un nombre de ruta con un guión inicial, podría hacerlo de manera segura como:

    foo -- -myfile
    

    y evite cualquier problema con -m usado como una extensión.

    así como también :

    Pauta 10:
    El argumento --debe aceptarse como un delimitador que indica el final de las opciones. Los siguientes argumentos deben tratarse como operandos, incluso si comienzan con el '-'carácter. El --argumento no debe usarse como una opción o como un operando.

  2. Especifique la ruta explícitamente:

    cd ./-2
    

    Esto especifica la ruta nombrando explícitamente el directorio actual ( .) como el punto de partida.

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

    Estas son variaciones de lo anterior. Cualquier número de tales variaciones puede ser posible; Lo dejaré como ejercicio para que el lector los descubra a todos.

Michael Hampton
fuente
23
No es solo GNU, es parte del estándar POSIX. Consulte 1.11 Valores predeterminados de descripción de la utilidad y 12.2 Directrices de sintaxis de la utilidad (directriz n. ° 10). Desde la cdpágina "La cdutilidad se ajustará a ... la sección 12.2".
Dietrich Epp
Ahora tengo curiosidad por saber cómo crear un CD en un directorio llamado -!
sergiol
2
@sergiol De la misma manera.
Michael Hampton
1
@ArtB: No. Las comillas solo afectan la división del campo. Entonces "hello world"es un argumento pero hello worldes dos, y "-2"es lo mismo que -2.
Dietrich Epp
1
@sergiol: Ninguno de ellos cd -- --o cd ./--debería funcionar.
Keith Thompson el
49

Esto debería funcionar:

cd -- -2 

- significa que no hay más opciones

Tim Haegele
fuente
26

Esto funcionará si '-2' está en el directorio actual.

    cd ./-2

Puede autocompletar escribiendo y presionando tab.

nueva abeja
fuente
11

cd /home/...../-2 también funciona. Dar la ruta completa de acceso.

Vivek
fuente
7

Solo para complementar, si desea eliminar / eliminar este directorio, puede usar el siguiente comando:

rm -r -- -2
Zignd
fuente
... y solo para complementar, nunca haría eso, sino que usaré una herramienta gráfica como mc o cambiaré el nombre del directorio primero.
Nick
-1

Sé que esta pregunta ya ha sido respondida. Si alguien tiene una situación como la mía, esto es para ellos:

Ejecuté una aplicación Java y estaba buscando un directorio que comenzara <path>, se suponía que debía reemplazarlo con la ruta adecuada antes de ejecutar la aplicación. Sin embargo, olvidé hacer eso. La aplicación creó un directorio llamado <path>.

Traté de cd <path>- me dio el error "-bash: error de sintaxis cerca de la nueva línea de token inesperada" Según la sugerencia aquí (entiendo que es para el directorio que comienza con - y no <) lo intenté cd -- <path>. Sin embargo, obtuve el mismo error.

Cuando lo intenté cd \<path>\, ¡esto funcionó!

Información de antecedentes:

Los símbolos "<" y ">" se utilizan para redirigir STDIN y STDOUT, por lo tanto, deben escaparse para que el shell no los interprete como redireccionamientos.

Jobin Thomas
fuente