Sejauh yang saya tahu, saya dapat menggunakan perintah tee untuk membagi output standar ke layar dan file lebih lanjut:
command -option1 -option2 argument | tee file1 file2 file3
Apakah mungkin untuk mengarahkan output ke perintah daripada file menggunakan tee, sehingga saya secara teoritis bisa membuat rantai perintah?
command-line
pipe
tee
Abdul Al Hazred
sumber
sumber
Jawaban:
Anda bisa menggunakan pipa bernama ( http://linux.die.net/man/1/mkfifo ) pada baris perintah
tee
dan memiliki perintah membaca pada pipa bernama.Ketika
command
selesai,tee
akan menutup pipa bernama, yang akan memberi sinyal EOF (baca 0 byte) pada masing-masing/tmp/dataN
yang biasanya akan menghentikancmdN
proses. Contoh nyata:Karena proses latar belakang, shell mengembalikan prompt sebelum output program. Ketiga contoh
wc
diakhiri secara normal.sumber
/tmp/data/{0,1,2}
. Kemudian lagi, dalam bash Anda bisa menggunakan proses substitusi dan lewatimkfifo
seluruhnyaJika saya mengerti dengan benar, Anda mencari yang setara
tee file1 file2 file3
, tetapi daripada menulis data yang sama ke tiga filefile1
,file2
danfile3
, Anda ingin menyalurkan data yang sama ke dalam tiga perintahcmd1
,cmd2
dancmd3
, yaituharus setara dengan
kecuali itu
…
hanya akan dieksekusi sekali.Ada dua cara untuk melakukan itu.
Ksh93, substitusi proses dukungan bash dan zsh . Ini adalah generalisasi dari pipa yang memungkinkan argumen dari suatu perintah menjadi file yang, ketika ditulis untuk, meneruskan data sebagai input ke suatu perintah (ada juga varian input yang, ketika dibaca dari, memperoleh output data dengan suatu perintah) . Itu adalah,
mencetak
hello
ke output standar dan selain itu dijalankancmd1
denganhello
input.Jadi misalnya, jika Anda ingin menduplikasi input
somecommand
dan meneruskannya ke keduanyacmd1
dancmd2
, Anda bisa menggunakannyaJika shell Anda tidak mendukung substitusi proses, Anda dapat menggunakan pipa bernama. Lihat jawaban Arcege untuk cara kerjanya. Pipa yang dinamai kurang nyaman daripada substitusi proses karena Anda harus membuatnya dan menghapusnya, dan memulai dan menyinkronkan proses secara manual. Mereka memiliki keuntungan menjadi sepenuhnya portabel, sedangkan tidak semua shell mendukung proses penggantian. Mereka juga dapat digunakan dalam skenario selain yang proses substitusi adalah untuk.
Di bawah tenda, pada beberapa sistem, proses penggantian menggunakan pipa bernama secara internal. Pada sebagian besar sistem, ini bergantung pada file bernama yang mewakili deskriptor file .
sumber
pee
darimoreutils
.Setidaknya dalam bash Anda dapat melewati
mkfifo
menggunakan subtitusi proses:atau untuk mengadopsi contoh Arcege
sumber
Saya terkejut tidak ada yang menyebutkan
pee
perintah dari moreutils ( https://joeyh.name/code/moreutils ).sumber