clojure ile kabuk komutlarını çalıştırmak için (use '[clojure.java.shell :only [sh]])
buldum. Şimdi, (sh "ls" "-a")
işini yaparken (sh "ls" "-a" "| grep" "Doc")
yapmıyor. Hilesi ne?Clojure: Kabuk komutlarını boru ile nasıl yürütülür?
cevap
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
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")
- 1. Kabuk pencereleri olmadan kabuk komutlarını çalıştırma
- 2. Gruntjs görevinde MULTIPLE kabuk komutlarını nasıl çalıştırırım?
- 3. Kabuk komutlarını groovy'den doğru olarak nasıl çağıracağım
- 4. Kabuk boru hattında `jq` nasıl kullanılır?
- 5. 3 Git komutlarını güncelleştirmek için bir kabuk komut dosyası hazırlayın
- 6. boru
- 7. Solaris GDB: Nasıl yürütülür?
- 8. Clojure ile sunucu programlama
- 9. Git komutlarını atomik olarak (kabuk ile değil) birleştirmenin bir yolu var mı?
- 10. Belirli bir konumdan Clojure uygulamasında kabuk komutunu çalıştırın
- 11. Python'da alt işlem olarak funcion geri çağırma nasıl yürütülür?
- 12. Vim'de nasıl derlenir ve yürütülür?
- 13. Boru Hattı ile Jenkinsfile dizinine nasıl başvurabilirim?
- 14. Clojure
- 15. runMain özel görevinden nasıl yürütülür?
- 16. PHP olarak nasıl metin yürütülür
- 17. JQuery'de zincirleme işlevler nasıl yürütülür?
- 18. Bash komutları C'den nasıl yürütülür?
- 19. Kabuk kaçmadan sistem() kullanarak Ruby'de harici komutun stdout'u nasıl yürütülür ve yakalanır?
- 20. Clojure
- 21. Ex komutlarını vim ile yeniden eşleyebilir miyim?
- 22. nrepl.el ile çalışırken Clojure bağımlılıklarını nasıl güncelleştiririm?
- 23. Clojure
- 24. Clojure
- 25. Clojure
- 26. Kabuk
- 27. Boru hattı ile çalışma sırası
- 28. Clojure
- 29. Doctrine2 ve MySQL ile Depolanmış Yordamlar nasıl yürütülür
- 30. jBehave ile aynı anda birden fazla test nasıl yürütülür?
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
'' '' '' '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. –
Ayrıca https: // github'a da bakabilirsiniz. .com/Raynes/conch. Boru hatlarını destekliyor: https://github.com/Raynes/conch#piping –