2016-04-20 22 views

cevap

12

clojure.java.shell/sh belirtilen bağımsız değişkenlerle (sh'a iletilen diğer parametrelerle) bir komutu (sh işlevine iletilen ilk bağımsız değişken) yürütür.

Eğer çalıştırdığınızda:

(sh "ls" "-a" "| grep" "Doc")

Eğer parametreleri -a, | grep ve Doc ile ls yürütmek istiyoruz.

Eğer terminalde ls -a | grep Doc yazın

sonra kabuk onun std çıkarıp kabuk tarafından başlatılmalıdır başka bir işlem ( grep) için std olarak iletin, ls yürütme olarak yorumlar.

Kabuk ls biri olarak süreci başlatarak ne yaptığını taklit olabilir, onun std çıkışını alıp daha sonra girdi olarak ls çıktı geçen grep yürütün. bash olarak alır bu yüzden önemlidir

(sh "bash" "-c" "ls -a | grep Doc")

ayrı argümanlar olarak -c ve ls ... geçmek: Bu terminalde yazdığınız sanki

basit bir çözüm sadece her şeyi yürütmek için bir shell sürecini sormaya olacaktır ayrı bir parametre. Ayrıca, tek bir dize (ls -a | grep Doc) olarak yürütmek istediğiniz tüm komutu sahip olmanız gerekir. Aksi halde, sadece -c'dan sonraki ilk argüman bir komut olarak ele alınacaktır. Örneğin bu ne istiyorsunuz yapmayacağım:

(sh "bash" "-c" "ls -a" "|" "grep Doc")

+0

Bu çok iyi bir şekilde açıklanmıştır cevabı, teşekkür ederim! Şimdi sadece saf bilgi için, aslında başka bir "(sh" grep "" Doc ")' '' '' (': out (sh" ls "" -a "))' nin çıktısını göndererek bunu yapmanın bir yolu var mıdır? – shakedzy

+0

'' '' '' 'seçeneğini' '' seçeneğini kullanarak önceki bir işlemden '' out' 'değerini geçirebilirsiniz.Ancak onu kullanarak bir işlemden diğerine veri akışı özelliğini kaybedersiniz. bir işlemden çıktığında ve tamamlandığında, tüm içeriğini bir diğerine aktarırsınız.Tüm, verileri bir süreçten diğerine akıtmaya gerek kalmadan pipeline kullanır ve herşeyi arabelleğe almanıza gerek kalmaz.' java.lang.Runtime.exec() işlevini kullanabilirsiniz. ve ilk işlemden çıktı verilerini elde etmek için java.lang.Process.getOutputStream' ve onu bir sonraki bölüme geçirin, fakat Clojure 'sh' onu desteklemiyor. –

+1

Ayrıca https: // github'a da bakabilirsiniz. .com/Raynes/conch. Boru hatlarını destekliyor: https://github.com/Raynes/conch#piping –

İlgili konular