aşağıdaki komutu çalıştırmak için çalışıyorum takma adlar Bu bir parametre alır). Görünüşe göre, xargs bunları çalıştırabileceği şeyler olarak kabul etmiyor. Bunu düzeltmenin akıllıca bir yolu var mı?Xargs
Xargs
cevap
için parametre olarak bu komut dosyasının adını geçirmek: Bu find
tarafından döndürülen her dosya için bash
başlayan ibaret olmasına rağmen
, böylece küçük bir shell script yazabilirsiniz Sadece etkileşimli kabuğun takma adlar hakkında bilgisi var, neden sadece xargs
aracılığıyla takılmadan takma adı çalıştırmıyorsunuz? Eğer dosya adları onları yeni satır yok eminseniz
find . -iname '.#*' -print0 | while read -r -d '' i; do foobar "$i"; done
(Tran, neden? olurdu), sen beri, hatta
find . -iname '.#*' -print | while read -r i; do foobar "$i"; done
ya da sadece find -iname '.#*' | ...
bu kolaylaştırabilirsiniz varsayılan dizin .
ve varsayılan eylem -print
'dur.
Bir daha alternatif: kelimeler satırbaşıyla sadece split (: IFS=$' \t\n'
varsayılan) olan
IFS=$'\n'; for i in `find -iname '.#*'`; do foobar "$i"; done
söylüyorum Bash. Bununla birlikte, buna dikkat etmelisiniz; Bazı betikler değiştirilmiş bir $IFS
ile iyi başa çıkmaz. Ayrıca args sayısını belirleyebilir Bash Eğer kullanma
Bu cevap, NEDEN xargs kullanamadığımızı ve nasıl xas'ları takma ad ile kullanabileceğimizi yanıtlıyor. –
Bu cevap bize xargs kullanarak * alternatifler * veriyor. Xargs * kullanarak çalışan bir cevap için, ilgili sorudaki @ camh cevabına bakın: http://stackoverflow.com/questions/979453/how-can-i-use-aliased-commands-with-xargs (Nathan Fellman yukarıda bağlı) –
Genellikle böyle bulmak kullanın:
find . -iname '' -exec cmd '{}' \;
'{}' dosya ve \ ile değiştirilir alacak; yürütme zincirini sonlandırmak için gereklidir. Bu senin fonksiyonu ile işe yaramazsa Ancak, bash aracılığıyla çalıştırmak gerekebilir: Bir satırda
find .. |sed -e "s/.*/cmd '&'/"|bash
Bul baskılar her dosya, sed sadece komut ile bu önek ve ardından boru onu vurmayı yürütme için. Ne olacağını görmek için | bash'ı atlayın.
Yeni bir GNU bulgusu kullanıyorsanız, '-exec cmd 'yerine {}' +' kullanın: bu daha çok xargs gibi davranır Bunun içinde, bulunan her dosya için yeni bir cmd yürütmek yerine argümanları tek bir işlem halinde topluca işleyecektir. – ephemient
Onun işlevinin birden fazla parametre alabileceğini düşünmekteyim ki, xargs'e -L 1 seçeneklerini sunmuyordu ... – Alnitak
Oh, işte bu -L mi? Ben bakmadım ve bu amaçla -n kullanıyorum. – ephemient
xargs
onun parametre olarak verilen programıexec
edebilmek için beklediği nedeniyle çalışmıyor.
Sizin durumunuzda foobar
beri bir bash
diğer ad veya işlevi yürütmek için hiçbir program yoktur.
#!/bin/bash
. $(HOME)/.bashrc
func $*
ve O zamandan beri xargs
Bu betiği nereye yerleştirmeliyim ki * bu * xargs tarafından tanınır? –
@NickVolynkin, nerede isterseniz, $ PATH'de olduğu veya konumunun doğrudan "xargs" değerini verdiği sürece. – Alnitak
tamam, açıklama için teşekkürler. –
böylece gibi diğer adı (ya da fonksiyon) geçirilen:
alias myFuncOrAlias='echo' # alias defined in your ~/.bashrc, ~/.profile, ...
echo arg1 arg2 | xargs -n 1 bash -cil 'myFuncOrAlias "$1"' arg0
echo arg1 arg2 | xargs bash -cil 'myFuncOrAlias "[email protected]"' arg0
- 1. xargs komut uzunluğu sınırları
- 2. xargs: yönlendirme sonrası değişken ikamesi
- 3. xargs - koşul ve eko varsa {}
- 4. Arka plana xargs tarafından oluşturulan komutları gönderme
- 5. Çalışmıyor: find -print0 | xargs -0 bash -c "...."
- 6. Arama modelindeki sed ile xargs nasıl kullanılır
- 7. Çıkarma rm kullanarak Bul ile dosya ve Xargs
- 8. Daha hızlı, 'bulmak -exec' veya 'bulmak | xargs -0 '?
- 9. Her xargs komutu arasında 1 saniye nasıl uyulur? Örneğin
- 10. Argüman listesi çok uzun olmadan birçok dosyayı nasıl taşıyabilirim?
- 11. Shell Scripting: Belirli bir desen eşleştirme tüm dosyaları silecektir bash komutunu yazmaya çalışıyorum
- 12. bash komut kabuğundan çalışır ancak cron işi dan
- 13. grep sadece metin dosyaları
- 14. Nasıl vim uzun bash komutunu eşlenir?
- 15. dosyaları ile bul? Dosya adında ve bu
- 16. Tüm parametreleri bir dekoratöre nasıl aktarabilirim?
- 17. Perl yorumlayıcılı tek tırnaklardan nasıl kurtulurum?
- 18. Oluşturulan dosyayı linux içinde otomatik olarak nasıl inotify?
- 19. Rails uygulaması için yeniden kurulum izinleri bu kadar doğru mu?
- 20. Tüm yerel yer işaretlerini kaldırın ve civatası depodan alıkoyun
- 21. grep sonuç dosyalarının ilk N satırlarını silmeniz gerekiyor
- 22. Kaldır dosyası bazı dosyayı bir dizine ama '.gitignore' dosyasını kaldırmak istediğiniz dosyayı
- 23. Git Alias'ta borular var mı?
- 24. Bir metin dosyasından etkileşimli bir bash komut dosyasına giriş beslemesi nasıl yapılır
- 25. Git her dosyanın katkıda bulunanları
- 26. Besteci: Proje Komut Dosyaları ve Eklentileri Listesi?
- 27. -i bağımsız değişkeni desteklenmediğinde grep ve sed kullanarak bir dizgede birden çok dosya nasıl değiştirilir? Ben bu komutu denedim
- 28. 1G'den küçük dizinleri taşıma
- 29. Etiket etiketini git etiketinden nasıl okuyabilirim?
- 30. Dosya içerikleri komut satırı argümanları olarak nasıl kullanılır?
Bu şimdiye yerine benim ~/bin klasörü komut dosyaları oluşturmak nedenlerinden biridir bash takma adları oluşturma. Bu şekilde, takma adlarımı herhangi bir kabuktan kullanabilirim: BASH, ZSH, IPYTHON veya FISH. – Yoo
İşte benzer (ama aynı değil) bir soru: http: // stackoverflow.com/questions/979453/how-can-i-use-aliased-commands-with-xargs –