2010-08-05 22 views
12

" Tümünü yap "ifadesini içeren kısa bir kabuk komut dosyası yazıyorum. Kritik değil, ama bu durumda '' herkes için yapılmayacak bir şey '' mesajını bastırabilmemin bir yolu var mı? Bunu baskılayan bir bayrak bulmayı umuyorum (bir tane olduğundan emin değil), fakat ek bir satır veya 2 kod da işe yarayacaktı."Tümünü kaldır" "

FYI Bash kullanıyorum.

Düzenleme: daha açık olmak gerekirse, yalnızca yapılacak bir şey olmadığını iletmek istiyorum. Aksi halde, çıkışı görüntülemek istiyorum.

cevap

13

(zaten değilse) Sen "tüm" bir PHONY hedef yapabilirsiniz çözelti, sadece :) ... bu biraz daha verimli hale getirmek

.PHONY: all 
all: realTarget 
     @true 
+10

Yankı yerine, muhtemelen sadece bir @ –

+0

@ William Pursell için: yapabilirsin: golly, haklısın. Asla bilemedim: '' 'bir kabuk no-op ... ya da böyle bir şey için kullanabileceğim. – Beta

+1

Bu sinsi yaklaşımı seviyorum. İkaz artık ortadan kalkıyor çünkü “artık” artık yapacak bir şey var, ama hiçbir şey yapmıyor. “Yankı” için başka bir seçenek, eylemi hiçbir şey basmayacak ve sessizce başarılı olan 'true' yapmaktır. – RBerteig

1

bayrak -s sessizlikler olun: make -s all

DÜZENLEME: Başlangıçta O bayrağın -q susturulmuş markasını cevap verdi. Manga, geçerli bayraklar olarak -s, --silent, --quiet'u belirtmesine rağmen benim için çalışır.

+0

W Tenney, benim için bu '-s',' '--silent' veya – Anders

+1

--quiet' olmam gerektiği Daha açık. Sadece dosyaların güncel olduğu durumu bastırmak istiyorum. Aksi halde çıktıyı göstermek istiyorum. – sas4740

+0

Başka birinin yanıtını gördüm ve önerdim 'make all | grep -v "Yapılmayacak bir şey yok" ama bu cevabı sildiği anlaşılıyor. –

0

grep çözeltisi: 2>&1 1>&3 3 fd ve Stdout'a en stderr'yi yapmak make 'stdout'u gönderir

{ make all 2>&1 1>&3 | grep -v 'No rule to make target `all' >&2; } 3>&1 

yapı. grep daha sonra önceki komutun stdout'undan okur, sorunlu çizgiyi kaldırır ve stdout'unu stderr'e gönderir. Son olarak, fd 3 stdout'a döndürülür.

.PHONY: all 

all: realTarget 
    @echo > /dev/null 
+0

Bu gerçekten gerekli mi? Sadece grep -v'yi yapmaktan ne farklı? – sas4740

+1

Her şeyden önce, zaten benim için, bu mesaj stderr gider, bu yüzden en azından grep'in herhangi bir etkiye sahip olması için stderr'i yeniden yönlendirmelisiniz. Ardından, make'in çıktısının geri kalanını istediniz, bu yüzden stderr'i stdout ile karıştırmak istemedim. Son olarak, benim için de bir öğrenme alıştırması. –

6

isterim önceki geliştirmek: göze çarpmayan bir şey bir önkoşul olarak gerçek hedefi var ve yok