Xargs kullanırken [arg] argüman yerine stdin'e yönlendirin [kapalı]


12

exmaple için, komutunu kullanarak

cat foo.txt | xargs -I{} -n 1 -P 1 sh -c "echo {} | echo"

foo.txtİki satır içerdiği

foo
bar

Yukarıdaki komut hiçbir şey yazdırmaz.

Yanıtlar:


6
cat foo.txt | xargs -J % -n 1 sh -c "echo % | bar.sh" 

Zor kısmı xargs örtülü alt kabuk çağırma gerçekleştirir. Burada sh açıkça çağrıldı ve boru ana konveyörün bir parçası haline gelmiyor


1
Teşekkürler, daha somut bir örnek sunmak için sorumu güncelledim. ama önerdiğiniz gibi çalışmıyor ..
Ryan

1
yankı stdin'den okuyamıyor, bu yüzden boru tesisatının bir anlamı yok. Bunu karşılaştırın: cat foo.bar | wc -lvecat foo.bar | xargs -J % -n 1 sh -c "echo % | wc -l"
Kondybas

1
Sanırım -Iyerine demek istiyorsun -J; -Jxargs için seçenek yok
Hitechcomputergeek

Arasında @Hitechcomputergeek FreeBSD sürümü xargsvar -Jeşdeğerdir seçeneği -ilinuxxargs
Kondybas

@Kondybas Bana bunu söylediğin için teşekkürler; İkisi arasında bir fark olduğunu bilmiyordum. POSIX lol'yi takip etmemesi için GNU'ya güvenebilirsiniz. ( -J-I
POSIX'te

2

Tüm foo.txt satırlarını işlemek istiyorsanız bir döngü kullanmanız gerekir. &Süreci arka plana koymak için kullanın

while read line; do
   echo $line | bar.sh &
done < foo.txt

Girişinizde boşluklar varsa, dahili alan ayırıcısını yeni satıra ayarlayın

# save the field separator
OLD_IFS=$IFS

# new field separator, the end of line 
IFS=$'\n'

for line in $(cat foo.txt) ; do
   echo $line | bar.sh &
done

# restore default field separator  
IFS=$OLD_IFS     

Hayır-hayır, ben de takılı kaldım. TS, dosyayı ayrı satırlara ayırmak ve bağımsız olarak komut dosyasına beslemek istiyor
Kondybas

1
Sürece paralel olarak xargs kullanmalıyım ..
Ryan

Tamam :-) Ben sadece xargskullanılan OP seçenekleri baktım .
Matteo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.