Dosya adı bekleyen bir komuta kanal iletme


19

Ben bir komut var demek foobir dosya ismi argümanı: foo myfile.txt. Can sıkıcı bir şekilde, foostandart girdiden okunmuyor. Gerçek bir dosya yerine, başka bir komutun sonucunu iletmek istiyorum (gerçekte, pvdosyayı cat ve bir yan etki olarak ilerleme ölçer çıktısı).

Bunu yapmanın bir yolu var mı? Benim hileler çantamda hiçbir şey yapmıyor gibi görünüyor.

( fooBu durumda dosyayı sırayla işler inanıyorum bir PHP komut dosyasıdır).

Ubuntu ve Bash kullanıyorum

EDIT Biraz belirsiz sorun açıklaması için özür dilerim, ama istediğimi yapan cevap:

pv longfile.txt | foo /dev/stdin

Çok açık şimdi görüyorum.


Tek astar mı arıyorsunuz?
Dave Forgac

Foo'nun stdin'den okunmasını sağlamak için "-" argümanını kabul etmediğinden emin misiniz?
rackandboneman

Ne yazık ki evet, bu durumda - bu bir php betiği.
Steve Bennett

Evet gerçekten. .
Steve Bennett

Yanıtlar:


19

Doğru bir şekilde ne yapmak istediğinizi anlarsam, bash'ın komut değiştirme özelliği ile yapabilirsiniz:

foo <(somecommand | pv)

Bu, mkfifobash'ın sizin için ayrıntıları işlemesi dışında -bazı yanıtların önerdiğine benzer bir şey yapar (ve düzenli bir adlandırılmış kanal yerine / dev / fd / 63 gibi bir komutu komuta iletir). Bunu daha doğrudan bu şekilde de yapabilirsiniz:

somecommand | pv | foo /dev/stdin

1
Aman güzel! Ben pv inputfile.txt | foo /dev/stdinde tam aradığım bu değildi ama hiç düşünmedim.
Steve Bennett

Woot! / dev / stdin
adaçayı

<(.)benim için çalıştı. Bu sözdizimi Bash kılavuzunda belgelenmiş mi? (.)Komut ikamesi belgelenirken anlıyorum , ancak <açıklamasını kombinasyonuyla görmedim .
flow2k

@ flow2k "İşlem ikamesi" olarak adlandırılır - bkz . bash kılavuzunun 3.5.6. bölümü .
Gordon Davisson

Anladım. Haklısın - adlandırılmış kanallar / kullandığını belirtiyor mkfifo.
flow2k

2
ARRAY=(`pv whatever`); for FILE in $ARRAY; do foo $FILE; done


1

Mkfifo kullanmayı deneyin.

mkfifo file_read_by_foo; pv ... > file_read_by_foo 

Başka bir kabukta foo file_read_by_foo komutunu çalıştırın


0

xargs bunun için iyi çalışıyor gibi görünüyor:

echo longfile.txt | xargs pv

Bu farklı bir şey yapar: pvher biri bir veya daha fazla satır çizilen birden çok kez çalıştırma longfile.txt. Burada olduğum şey değil.
Steve Bennett
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.