2012-09-27 20 views
7

Gölü ilk için bu iki satır bir göztcl exec stdout'u ihtiyacı yönlendirildi sonuç çok

vaka 1

set cvsUpdStr [exec cvs -qn upd] 

vaka 2

set cvsUpdStr [exec cvs -qn upd >&@stdout] 

saklanmasına cvsUpdStr durumu komutun çıkışıdır, ancak komut yürütme sırasında yazdırılan hiçbir şey yoktur. İkinci durumda cvs upd komut çıkışı ekranda yazdırılır, ancak cvsUpdStr boştur. cvs upd sonucunu yazdıracak ve aynı çıktıyı cvsUpdStr değişkeninde kaydedecek şekilde nasıl birleştirilir?

+0

CVS şeylerde özellikle ilgileniyorsanız, tkcvs'e bir göz atabilirsiniz, çünkü Tcl ile çoğu CVS komutunu tamamlıyor. http://tksvn.tigris.org/source/browse/tksvn/trunk/tkcvs/ – schlenk

cevap

4

İki olasılık vardır. Ya bir boru hattı olarak (open |... ile oluşturulmuş) çalıştırın ve iletileri depolayarak ve yazdırırken olduğu gibi işleyin ya da Unix tee yardımcı programını kullanın. İkinci alternatif kesinlikle daha basit!

# I like to spell out “update” in full 
set cvsUpdStr [exec cvs -qn update | tee /dev/tty] 

tee programı normal standart çıkışı ve ayrıca olan dosyaya standart girdi gönderir; Geçerli terminale göndermek için /dev/tty kullanıyoruz.

Ancak, çıktısını arabelleğe aldığından dolayı cvs çıktısında uzun gecikmeler olabileceğini unutmayın. Bu, C terminalinin I/O işlemlerinin terminal dışı bir çıkışa gönderilmesinde varsayılan davranışıdır ve çıktıya anında ihtiyacınız varsa bir sorun olabilir. Bu oldukça ilgili alır Tespit çıkış patlamalı olmaktan memnunsanız, sadece yalnız bırakın böylece Windows'ta


, bunu başka bir şekilde yapmak gerekir ... (siz Expect kullanarak sonunda).

set pipe [open |[list cvs -qn update] "r"] 
while {[gets $pipe line] >= 0} { 
    append cvsUpdStr "$line\n" ;# Note the \n at the end! 
    puts $line 
} 
close $pipe      ;# Any errors turn up here! 

|[list ...] ile yapı Tcl açısından oldukça sıradışı, ama bu durumda kullanılacak doğru biridir. (open için “dosya adı” ilk karakteri | ise, tartışmanın dinlenme bir boru hattı inşa etmek için kullanmak bağımsız değişkenler listesindeki olarak ele alınır.)

+0

Ben dul hakkında, bildiğim tee hakkında, ama burada yardımcı olmaz :( – Narek

+0

Çözünürlük nedir? .'? – Narek

+0

@Narek Güncel sürümü deneyin. –