Quiero usar el touch
comando en la terminal de Linux para crear un archivo con un nombre que comience con el símbolo -
, digamos -attempt
.
¿Cómo puedo superar el hecho de que -
sea un personaje especial?
Por ejemplo, si quisiera crear un archivo con el nombre #attempt
, no podría simplemente escribirtouch #attempt
En su lugar tendría que escribir touch \#attempt
, pero en el -
caso, incluso si lo uso, \
todavía no funciona bien).
Respuesta1
Dos caminos:
Aléjalo -
del primer carácter.
touch ./-foo
O use el --
marcador de fin de interruptores
touch -- -foo
Respuesta2
touch \#attempt
funciona porque el signo hash es especial para el shell. De manera similar, necesitaría algo como touch \(foo\)
, o touch 'this & that'
para nombres de archivos con paréntesis o símbolos, etc.
Pero escapar del tablero no ayuda ya que no es especial.al caparazón, sino a la utilidad lanzada por el shell. Ejecutar la línea de comando del shell touch \-foo
es lo mismo que ejecutar touch -foo
; de todos modos touch
obtendrá el argumento único -foo
.
Entonces, en lugar de escapar, se requiere algo más.
La forma estándar de decirle a un programa que deje de interpretar los argumentos del comando como (posibles) opciones es insertar el argumento --
después de las opciones. Por ejemplo, esto se ejecutaría rm
con la opción -f
en un archivo llamado -r
:
rm -f -- -r
(y rm -- --
eliminaría un archivo llamado --
.)
Alternativamente, puede solucionar el problema asegurándose de que el guión no sea el primer carácter del nombre del archivo, generalmente anteponiendo ./
. Nuevamente, esto eliminaría un archivo llamado -rf
:
rm ./-rf