Me preguntaba cómo hacer un archivo con el nombre de una bandera, por ejemplo, si quisiera hacer una carpeta con nombre -a, ¿qué comandos funcionarían?
Probé mkdir '-a', mkdir \-ay tampoco funcionó. Estoy en Ubuntu
Me preguntaba cómo hacer un archivo con el nombre de una bandera, por ejemplo, si quisiera hacer una carpeta con nombre -a, ¿qué comandos funcionarían?
Probé mkdir '-a', mkdir \-ay tampoco funcionó. Estoy en Ubuntu
Respuestas:
Llame al comando así:
mkdir -- -a
Esto --significa que las opciones terminan después de eso, por lo que -ase interpreta literalmente y no como una opción mkdir. Encontrará esta sintaxis no solo en mkdir, sino en cualquier utilidad compatible con POSIX, excepto para echoy test. De la especificación :
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.
--Se recomienda usarlo como salvaguarda para casi cualquier acción en la que trate con nombres de archivos y desee asegurarse de que no rompan el comando, por ejemplo, cuando mueva archivos en un bucle, es posible que desee llamar a lo siguiente, de modo que un archivo llamado -iisn ' t (in?) correctamente analizado como una opción:
mv -- "$f" new-"$f"
cc -o -myfile -Wall -myfile.ccomo un ejemplo ligeramente artificial. Cualquier editor que valga la pena debería poder guardarlo en un archivo llamado -myfile.csi se lo solicita, pero el compilador de C probablemente no hará lo que quiere cuando se le dé dicha lista de opciones.
cccomando que Michael dio anteriormente, que tiene la -oopción de especificar el archivo de salida.
for f in ./*; do...lugar defor f in *; do...
La forma más sencilla que debería funcionar con cualquier programa razonable es usar un nombre de ruta relativo delante de -, por ejemplo mkdir ./-a, creará un directorio llamado -aen el directorio de trabajo actual.
El ejemplo más común de uso de este "truco" es cuando desea eliminar un archivo que comienza con un guión, para que pueda hacerlo rm ./-a.
./siempre son una buena idea: imagine que creó un archivo llamado -rfy luego llamó rm *.
--no se entiende por todos los comandos, solo algunos)
--era una cosa bash, ¿así que debería funcionar para todos los programas?
La razón por la cual mkdir '-a', o mkdir \-ano funciona es porque ambos métodos (usando comillas o barras invertidas) se utilizan para evitar que su shell (probablemente bash) les dé un significado especial. Como de -atodos modos no significa nada especial para el shell, estos no tienen ningún efecto sobre cómo se transmite mkdir.
En lo que a él mkdirrespecta, recibe una lista de argumentos del shell, y no puede decir si los puso entre comillas o no, o si hubo una barra invertida. Solo ve un argumento -a. Es por eso que necesita lo --que se explica en las otras respuestas.
Además de la respuesta de "slhck" hay otro truco que a veces funciona:
Ponga el nombre de archivo en cuestión dentro de 2 conjuntos de qoutes (diferentes) como "'-a'"o '"-a"'.
Si esto funciona o no depende del programa, pero es un último recurso si el programa no admite la --función POSIX .
Siempre se prefiere el método POSIX ya que es 100% confiable.
--para finalizar el procesamiento de opciones también supone que no necesita ninguna opción para seguir el nombre del archivo, que no siempre es el caso.
'-a'o "-a", al menos en sistemas de tipo BSD