2012-09-28 21 views
6

Ben Windows'un bu komut satırı girişi vardır:Ruby ile komut satırını yaparken dikey çubuktan nasıl kurtulabilirim?

dir /b | ruby -ne 'f=$_.chomp;File.read(f).each_line{|line| print f if line =~ /helloworld/};' 

Bu çizgi içinde helloworld ile geçerli dizindeki bütün dosyaları bulmaktır.

Bu hat line is not a valid command diyerek hata veriyor:

Benim sorum (Ben orada bunu yapmak için birçok yolu vardır ama sonrası o odaklanmıyorsa anlıyorum). Sonra bloğun içinde bir değişken olarak cmd cinsinden bir boru işareti olduğu için Ruby'de | fark ettim. Bütün satırı çift tırnak içine değiştirmeye çalıştım ve kaçış | işaret ama başarı yok. Dikey çubuktan nasıl kurtulabilirim?

Lütfen, grep, find, sed veya awk gibi diğer araçları kullanma veya bloğu for döngüsüne değiştirme gibi işlemleri yapmanın başka yollarını kullanmayın.

cevap

9

Ben boru ve özel karakterler hakkında şunları söylüyor this microsoft.com page bulundu:

işareti (&), boru (|) ve parantez() kaçış gelmelidir özel karakterlerdir bunları argüman olarak ilettiğinizde (^) veya tırnak işaretleri.

2

Tek tırnaklar sizin sorununuz gibi görünüyor. Bunun yerine Windows için gerekli olduğu için çift tırnak kullanın (Unix'in de anlayabileceği gibi).

Bu Windows benim için çalışıyor:

C:\tmp\ruby>echo helloworld > foo.txt 

C:\tmp\ruby>dir /b | ruby -ne "f=$_.chomp;File.read(f).each_line{|line| print f if line =~ /helloworld/};" 
foo.txt 

Seni çift tırnak çalıştı belirtti biliyorum ama aslında denenmiş yapıştırmak eğer başka şeylerin yanlış olduğunu, ben görebiliyorum.

+0

Aslında çalışıyor! Denedim, ama sadece ile çalıştı | \ tarafından kaçtı ama bir şey kaçmadan denemedim ve bu şaşırtıcı derecede iyi olduğu ortaya çıktı. – texasbruce

+0

@texasbruce Bunu duyduğuma sevindim. Bu, programlamanın gerçeklerinden biri - ayrıca işletim sisteminin işleyişini iyi anlamanız gerekiyor. Cevabım sorununuzu çözdüyse, lütfen kabul etmeyi düşünün. – Kelvin

İlgili konular