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 \-a
y 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 \-a
y tampoco funcionó. Estoy en Ubuntu
Respuestas:
Llame al comando así:
Esto
--
significa que las opciones terminan después de eso, por lo que-a
se interpreta literalmente y no como una opciónmkdir
. Encontrará esta sintaxis no solo enmkdir
, sino en cualquier utilidad compatible con POSIX, excepto paraecho
ytest
. 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-i
isn ' t (in?) correctamente analizado como una opción:fuente
cc -o -myfile -Wall -myfile.c
como un ejemplo ligeramente artificial. Cualquier editor que valga la pena debería poder guardarlo en un archivo llamado-myfile.c
si se lo solicita, pero el compilador de C probablemente no hará lo que quiere cuando se le dé dicha lista de opciones.cc
comando que Michael dio anteriormente, que tiene la-o
opció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-a
en 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-rf
y 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 \-a
no 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-a
todos modos no significa nada especial para el shell, estos no tienen ningún efecto sobre cómo se transmitemkdir
.En lo que a él
mkdir
respecta, 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