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.