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í:
Esto
--significa que las opciones terminan después de eso, por lo que-ase interpreta literalmente y no como una opciónmkdir. Encontrará esta sintaxis no solo enmkdir, sino en cualquier utilidad compatible con POSIX, excepto paraechoytest. De la especificación :--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:fuente
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 ejemplomkdir ./-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.fuente
./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', omkdir \-ano funciona es porque ambos métodos (usando comillas o barras invertidas) se utilizan para evitar que su shell (probablementebash) 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 transmitemkdir.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.fuente
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.
fuente
--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