¿Cómo puedo eliminar el archivo sin preguntarle al usuario si acepta eliminarlo? Estoy escribiendo un script de shell y uso la función rm, pero pregunta "¿eliminar el archivo normal?" y realmente no necesito esto Gracias.
rmno muestra un "eliminar archivo normal?" pregunta por defecto. Debe tener un alias rm -io una función definida. Me sorprende que el alias sea visible dentro de su script. ¿Está ejecutando el script ( ./foo.sh) o lo obtiene ( . foo.sho source foo.sh)?
Keith Thompson el
Respuestas:
103
Es posible que tenga un rmalias para rm -iprobar esto:
Alternativamente, use command rm ...o \rm ...para omitir el alias / función
glenn jackman
66
Se ha argumentado que tener rmalias rm -ies una mala idea. El rmcomando, por defecto, elimina silenciosamente el archivo nombrado. Al alias rm -i, puede adquirir el hábito de no verificar cuidadosamente antes de presionar Entrar, dependiendo de la solicitud interactiva para guardarlo. Luego escribe rm some-important-fileen un entorno sin el alias.
Keith Thompson
@Keith Eso es muy cierto, solo alias personalmente rm to rm -v
chown
1
Si "rm" es una función (en lugar de un alias), esta respuesta debería funcionar. Y el unsetcomando bash podría ser interesante
Xen2050,
56
La bandera de fuerza elimina todas las indicaciones;
Ya he votado por la respuesta de Lynks, y esto es exactamente lo mismo. Solo votando por el sentido del humor
rain_
Voté tanto el comentario como la respuesta solo porque alguien realmente encontró sentido del humor en SO ...
Mac
5
Dentro de un script de shell, desearía utilizarlo, rm -f <filename>pero también tiene la opción de deshacerse de la -iopción implícita para su entorno ingresando unalias rmsu shell (o perfil).
el yesprograma responde repetidamente sí a cualquier pregunta. para que pueda canalizarlo al rmprograma interactivo para obtener el efecto deseado también.
yes | rm <filename>
por el contrario, si no quieres hacer algo interactivo, puedes hacerlo
yes n | <something interactive>
y eso repetirá 'n' en la secuencia de entrada (respondiendo efectivamente no a las preguntas)
La yes nopción no me funciona. Mientras lo uso yes n | rm file.txt, en realidad elimina el archivo a pesar de que el archivo está protegido correctamente.
iammilind
5
Si tiene los permisos necesarios para eliminar el archivo y no desea que se le solicite, haga lo siguiente (-f = force):
rm -f file
Si no tiene permisos para el archivo, deberá usar:
Actualmente estoy trabajando en un sistema, donde el shell bash recibió la definición del comando rm como una función en uno de los archivos de configuración global:
rm () { /bin/rm -i ${1+"$@"}; }
Por lo tanto, ninguna de las respuestas anteriores con respecto a los alias funcionó. Para contrarrestar el comportamiento molesto, desactivé la función rm en mi archivo .bashrc
unset -f rm
Tuve un problema similar al del abridor. Sin embargo, no encontré ninguna respuesta que mencionara la posibilidad que rmestá oculta por una función de shell. Así que agregué la respuesta aquí con la esperanza de que sería de ayuda para alguien que enfrenta el mismo tipo de problema.
Escribir /bin/rmo rm -ftodo el tiempo es inconveniente y puede tener malas consecuencias (en el caso de rm -f).
Eso puede haber resuelto su problema, pero no responde la pregunta.
sospechoso
¿No funcionaría la respuesta seleccionada /bin/rm? Si tengo una función en bash, y un archivo ejecutable con el mismo nombre en el directorio actual, solo agregando ./frente al nombre llamará al archivo, no a la función. PD: agregué un comentario a la respuesta seleccionada sobre una función yunset
Xen2050
Si /bin/rmfunciona. Hacer esto unsetelimina la necesidad de escribir la ruta completa.
amanece
0
Si su rmalias es rm -i, entonces use unalias rm;
No lo use rm -fdirectamente a menos que realmente quiera eliminar muchos archivos protegidos contra escritura. Debe haber una muy buena razón para usar -f.
Sin embargo, si tiene muchos archivos protegidos contra escritura, es posible que prefiera rsync -r --delete empty/ removed_dir/una velocidad más rápida.
Mi forma favorita de hacer esto es simplemente usar el commandcomando en bash, de la misma manera que lo usas sudo. Esto ejecutará su comando sin alias, al igual que ejecutarlo por /bin/rm(probablemente rmtiene un alias como rm -i).
rm -f
,yes | rm
etc., pero esto pertenece a SU.rm
no muestra un "eliminar archivo normal?" pregunta por defecto. Debe tener un aliasrm -i
o una función definida. Me sorprende que el alias sea visible dentro de su script. ¿Está ejecutando el script (./foo.sh
) o lo obtiene (. foo.sh
osource foo.sh
)?Respuestas:
Es posible que tenga un
rm
alias pararm -i
probar esto:Para ver tus alias puedes correr
alias
.fuente
command rm ...
o\rm ...
para omitir el alias / funciónrm
aliasrm -i
es una mala idea. Elrm
comando, por defecto, elimina silenciosamente el archivo nombrado. Al aliasrm -i
, puede adquirir el hábito de no verificar cuidadosamente antes de presionar Entrar, dependiendo de la solicitud interactiva para guardarlo. Luego escriberm some-important-file
en un entorno sin el alias.unset
comando bash podría ser interesanteLa bandera de fuerza elimina todas las indicaciones;
rm -f {file}
fuente
Que la fuerza esté con usted -
rm -f
fuente
Dentro de un script de shell, desearía utilizarlo,
rm -f <filename>
pero también tiene la opción de deshacerse de la-i
opción implícita para su entorno ingresandounalias rm
su shell (o perfil).fuente
unalias rm
no funciona en CentOS? Amazon Linux?el
yes
programa responde repetidamente sí a cualquier pregunta. para que pueda canalizarlo alrm
programa interactivo para obtener el efecto deseado también.por el contrario, si no quieres hacer algo interactivo, puedes hacerlo
y eso repetirá 'n' en la secuencia de entrada (respondiendo efectivamente no a las preguntas)
fuente
yes n
opción no me funciona. Mientras lo usoyes n | rm file.txt
, en realidad elimina el archivo a pesar de que el archivo está protegido correctamente.Si tiene los permisos necesarios para eliminar el archivo y no desea que se le solicite, haga lo siguiente (-f = force):
Si no tiene permisos para el archivo, deberá usar:
fuente
La barra invertida
\
omite los alias.fuente
Además de usar el
-f
parámetro, también puede usar elfind
comando, p. Ej.fuente
Actualmente estoy trabajando en un sistema, donde el shell bash recibió la definición del comando rm como una función en uno de los archivos de configuración global:
Por lo tanto, ninguna de las respuestas anteriores con respecto a los alias funcionó. Para contrarrestar el comportamiento molesto, desactivé la función rm en mi archivo .bashrc
Tuve un problema similar al del abridor. Sin embargo, no encontré ninguna respuesta que mencionara la posibilidad que
rm
está oculta por una función de shell. Así que agregué la respuesta aquí con la esperanza de que sería de ayuda para alguien que enfrenta el mismo tipo de problema.Escribir
/bin/rm
orm -f
todo el tiempo es inconveniente y puede tener malas consecuencias (en el caso derm -f
).fuente
/bin/rm
? Si tengo una función en bash, y un archivo ejecutable con el mismo nombre en el directorio actual, solo agregando./
frente al nombre llamará al archivo, no a la función. PD: agregué un comentario a la respuesta seleccionada sobre una función yunset
/bin/rm
funciona. Hacer estounset
elimina la necesidad de escribir la ruta completa.Si su
rm
alias esrm -i
, entonces useunalias rm
;No lo use
rm -f
directamente a menos que realmente quiera eliminar muchos archivos protegidos contra escritura. Debe haber una muy buena razón para usar-f
.Sin embargo, si tiene muchos archivos protegidos contra escritura, es posible que prefiera
rsync -r --delete empty/ removed_dir/
una velocidad más rápida.fuente
Mi forma favorita de hacer esto es simplemente usar el
command
comando en bash, de la misma manera que lo usassudo
. Esto ejecutará su comando sin alias, al igual que ejecutarlo por/bin/rm
(probablementerm
tiene un alias comorm -i
).Ejemplo:
fuente
fuente