2015-01-16 4 views
5

Sto eseguendo zsh da Cygwin. Una delle mie funzioni di shell contiene una dichiarazionePerché rm -f mi chiede conferma su zsh?

rm -f somedir/* 

(voglio rimuovere tutti i file non nascosti in somedir, ma non la directory stessa). Tuttavia, sono sempre chiesto:

zsh: sure you want to delete all the files in ... [yn]? 

La formulazione di questo messaggio (notare le "zsh:" all'inizio) suggerisce che la domanda viene da zsh, non rm. Tuttavia, rm è un comando esterno:

$ type rm 
rm is /usr/bin/rm 

Tra l'altro, la richiesta si verifica anche se invoco esplicitamente rm come

$ command rm -f somedir/* 

C'è qualcosa dentro di zsh, che cerca di essere troppo intelligente?

+0

questo alias è presente nel tuo .zshrc: alias rm = 'rm -i'? – rscnt

+0

Basta digitare alias per verificare –

+0

No, come si vede dal mio intervento, ho usato sia 'type' che 'command'. 'type' avrebbe rivelato, se il loro sarebbe stato un alias, e 'command' lo avrebbe bypassato. Si noti inoltre che la domanda di conferma non viene da rm, ma da zsh, come possiamo concludere dalla formulazione. – user1934428

risposta

11

Sembra che lo RM_STAR_SILENT sia NON in effetti.
Si potrebbe fare setopt rmstarsilent per dire a zsh di non confermare un rm *.

L'opzione di shell RM_STAR_SILENT è:

Non chiedere all'utente prima di eseguire rm * o rm path/*.

- zshoptions(1): RM_STAR_SILENT


Se si vuole rendere l'effetto setopt temporalmente solo nel solo funzione di shell, si potrebbe usare in combinazione con il localoptions come di seguito:

my-test() { 
    setopt localoptions rmstarsilent 
    ... 
} 
+0

Ecco fatto. Molte grazie! zsh è sempre buono per una sorpresa .... – user1934428