Son 10 satırı istiyorsanız:
tail myFile.txt | tr '\n' '\0' | xargs -r0i myCmd {} arg1 arg2
Ancak GNU ile xargs, sınırlayıcıyı aşağıdakilerle yeni satıra ayarlayabilirsiniz:
tail myFile.txt | xargs -ri -d '\n' myCmd {} arg1 arg2
( -0kısaltmasıdır -d '\0').
Taşınabilir olarak, her karakterden de kaçabilirsiniz:
tail myFile.txt | sed 's/./\\&/g' | xargs -I{} myCmd {} arg1 arg2
Veya her satırı alıntılayın:
tail myFile.txt | sed 's/"/"\\""/g;s/.*/"&"/' | xargs -I{} myCmd {} arg1 arg2
NUL ile sınırlandırılmış son 10 kaydını myFile.txtistiyorsanız (ancak bu bir metin dosyası olmazsa), çağrılmadan önce to değerini dönüştürmeniz gerekir \n; bu, dosyanın tam olarak okunması gerektiği anlamına gelir:\0tail
tr '\n\0' '\0\n' < myFile.txt |
tail |
tr '\n\0' '\0\n' |
xargs -r0i myCmd {} arg1 arg2
Düzen (değişmesini beri tailhiç tail -fsorunuzu):
Yukarıdaki sonuncusu açıkça mantıklı değil tail -f.
xargs -d '\n'Biri çalışacaktır ancak diğer olanlar için, bir tamponlama sorunu olacak. İçinde:
tail -f myFile.txt | tr '\n' '\0' | xargs -r0i myCmd {} arg1 arg2
trbir terminale gitmediğinde çıkışını tamponlar (burada bir boru). IE, yazmak için veri dolu bir tampon (8kiB gibi bir şey) birikinceye kadar hiçbir şey yazmaz. Hangi araçlar myCmdgruplar halinde çağrılacaktır.
Bir GNU veya FreeBSD sisteminde, arabelleğe alma davranışını trşu stdbufkomutla değiştirebilirsiniz:
tail -f myFile.txt | stdbuf -o0 tr '\n' '\0' |
xargs -r0i myCmd {} arg1 arg2