Herramientas Unix: ¿y si un archivo se llama menos algo?

9

Siempre me pregunto: la mayoría de las herramientas GNU / Unix toman opciones en la forma "menos algo", a veces seguidas de un argumento. ¿Qué pasa si tienes un archivo llamado menos algo?

$ ls
-f
$ rm -f
$ ls
-f
$ mv -f abc
mv: missing destination file operand after `abc'
Try `mv --help' for more information.
$ cat -f
cat: invalid option -- 'f'
Try `cat --help' for more information.

o

$ ls
-ohello.c
$ gcc -ohello -ohello.c
gcc: fatal error: no input files
compilation terminated.

Esto es solo por curiosidad; No tengo un caso de uso para esto.


fuente
Debe encontrar una manera de pasar literalmente la cadena "-f" a la llamada al sistema. Normalmente eso es escapando con cuidado.
Flexo
2
Para el votante "cerrar porque está fuera de tema": Esta es una pregunta sobre la programación de shell y cómo evitar un problema. Es totalmente sobre el tema para SO. (OTOH, probablemente sea un duplicado; el problema es encontrar la otra pregunta relevante).
Jonathan Leffler

Respuestas:

12

Para eliminar un archivo llamado -x, use rm -- -x( --significa fin de las opciones) o rm ./-x.

Dan D.
fuente
10

Es bastante común hacer este tipo de preguntas en entornos de entrevistas. Una forma común de manejar archivos con guiones es:

$ rm -- -f
$ rm ./-f
William Pursell
fuente
6

Una pregunta común en Unix. La forma principal es dar el nombre completo de la ruta al archivo, para que no tenga un guión delante:

$ rm -file.txt
unknown option -l

$ rm ./-file.txt    #No problem!
$ rm $PWD/-file.txt #Same thing

En algunos comandos, puede usar un guión solo (o un guión doble) para finalizar las opciones. Sin embargo, esto no es necesariamente cierto con todos los comandos, o incluso con el mismo comando en diferentes sistemas.

$ rm -- -file.txt   #Works on Linux but not on some Unix systems
David W.
fuente
4

tienes que usar

  rm -- <filename>

Ex:

  rm -- -f
se sentó
fuente
Algún comentario no estaría mal.
usuario desconocido