Come evitare la necessità di emettere più volte "y" quando si rimuove il file protetto


52

Sto cercando una soluzione da utilizzare come risposta a "rm: rimuovere il file regolare protetto da scrittura [x]?"

Stavo pensando di rilasciare un personaggio seguito dal ritorno in carrozza per diverse volte, a Bashrc. Come lo facciamo?


È possibile definire una funzione. Questo thrad può aiutarti: stackoverflow.com/questions/756756/… .
alpert

Perchè vuoi fare questo? È un compito molto ovvio voler stampare i ritorni a capo (al contrario delle nuove righe) in ogni caso, e in .bashrc?
l0b0

@ l0b0 domanda modificata per essere più specifici
Iancovici,

Perché dovresti voler rimuovere i file in .bashrc? L'attività originale non è ancora chiara.
l0b0

3
@echadromani È molto comune su SO / SE cercare di comprendere il problema originale per fornire una soluzione ottimale che potrebbe essere applicabile ad altre situazioni.
l0b0

Risposte:


75

Modifica in base alla domanda aggiornata:

Per evitare che ti venga chiesto di rimuovere i file, aggiungi l' -fopzione ("force"):

rm -f /path/to/file

Questo ha un effetto collaterale si dovrebbe essere a conoscenza di: Se uno dei percorsi specificati non esistono, verrà non segnalare questo, e tornerà con successo:

$ rm -f /nonexistent/path
$ echo $?
0

Risposta originale:

Ecco una soluzione semplice:

yes "$string" | head -n $number | tr $'\n' $'\r'

yesripete qualsiasi stringa che le dai infinitamente, separata da nuove righe. headlo ferma dopo $numbervolte e trtraduce le nuove righe in ritorni a capo. Potresti non vedere alcun output a causa dei ritorni a capo, ma passandolo a questo comando (in bash) dovresti illustrarlo:

printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"

Gli utenti senza bashpossibile reindirizzare il risultato od, hexdumpo xxdper vedere i caratteri effettivi restituiti.


7

L'altro problema che ho riscontrato di volta in volta è che rmè alias rm -i, qualcosa del genere in / etc / bashrc:

alias rm='rm -i'

In quel caso unalias rmpuoi usare o puoi usare questo trucco che ho scoperto anni fa, mettere una barra rovesciata davanti a un comando che è stato modificato, per ignorare l'alias solo quella volta, ad esempio:

\rm somefile

Puoi saperne di più sugli alias attraverso un articolo su Nixcraft .


5

rmè hardcoded per chiedere "interattivamente" (prompt in attesa di input dell'utente) su file protetti da scrittura. ci sono due metodi per impedire rmdi chiedere:

rm -rf somedir

e

rm -r --interactive=never somedir

(entrambi funzionano anche senza -reliminare file anziché dirs)

spiegazione:

-ffa rm"ignorare file e argomenti inesistenti, non chiedere mai".

--interactive=neverfa quello che dice: non essere mai interattivo. in altre parole: mai sollecito.

la differenza tra -fe --interactive=neverè questa parte: "ignora file e argomenti inesistenti".

confrontare:

$ rm -rf nonexistingname
$ echo $?
0

e

$ rm -r --interactive=never nonexistingname
rm: cannot remove 'nonexistingname': No such file or directory
$ echo $?
1

la differenza è principalmente interessante quando si scrivono script in cui non si desidera mai rmessere interattivi ma si desidera comunque gestire gli errori.

riepilogo: utilizzo da riga di comando rm -rf. nell'uso degli script rm -r --interactive=never.


per una risposta alla domanda dichiarata ("Come evitare la necessità di emettere più volte" y "quando si rimuove il file protetto") consultare https://askubuntu.com/questions/338857/automatically-enter-input-in-command-line / 338.860 # 338.860


1

dai solo si a tutti i tuoi comandi!

yes | rm -r /path/
yes | <command>

Ad ogni modo puoi sempre forzare usando -f:

rm -r -f /path

-2

Anch'io ho riscontrato lo stesso problema. La risposta sopra è solo per un file, ma se si desidera ignorare molti sì.

Puoi usare

sudo rm -r /path/to/directory

per rimuovere tutti i file regolari protetti da scrittura


Questo è in fase di downgrade perché rimuove l'intera directory. Presumibilmente OP vuole solo rimuovere il file in questione, non tutti i singoli file nella stessa sottostruttura della directory.
Jake,

Ehi .... Forse hai ragione.
Gopal Prasad,

Ehi .... Forse hai ragione. Ma non in questo caso .. Come se un utente avesse molta pazienza e tempo, allora ha anche il tempo di dare 'sì' più volte ... Ho pensato che volesse rimuovere tutti i file con un solo comando. il file protetto richiede sempre la conferma prima di eliminare questo tipo di file. Uno di questi esempi è nel caso in cui si crei virtualenv e successivamente si desidera rimuovere in Python .. Provare e troverete il comando rm che chiede conferma e ogni volta devi fornire una risposta .. Ho risolto la situazione in questo modo.
Gopal Prasad,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.