Katakanlah saya memiliki skrip bernama script
, yang membaca dari stdin
dan memuntahkan beberapa hasil ke layar.
Jika saya ingin memberinya konten dari satu file, saya akan mengetik:
$ ./script < file1.txt
Tetapi bagaimana jika saya ingin memberi makan isi beberapa file ke skrip dengan cara yang sama, apakah itu mungkin? Sejauh ini yang terbaik yang saya hasilkan adalah:
cat file1.txt file2.txt > combined.txt && ./script < combined.txt
Yang menggunakan dua perintah dan membuat file temp. Apakah ada cara untuk melakukan hal yang sama tetapi tidak membuat file gabungan?
bash
shell
scripting
io-redirection
0x4B1D
sumber
sumber
zsh
dan Anda akan dapat menjalankancmd <file1 <file2 ... <fileN
;)Jawaban:
Anda dapat menggunakan
cat
dan pipa:Contoh Anda, menggunakan pipa, dan tidak ada file temp:
sumber
join
tanpa file temp, tetapi hanya untuk membuatnya jelas bagi pembaca:cat f1 f2
tidak menghasilkan output yang sama sepertijoin f1 f2
join
contoh saya karena saya bermain dengannya sebelumnya; pada kenyataannya, untuk contoh saya saya gunakancat
.Jika Anda tidak ingin menggunakan pipa, Anda dapat menggunakan pengalihan input dengan substitusi proses:
sumber
Untuk menambahkan jawaban @Jonah Braun, jika Anda perlu menambahkan output proses ke dalam skrip Anda juga, yaitu file Anda mungkin tidak ada di disk Anda tetapi diakses melalui
URL
menggunakancurl
atau alat serupa.Sesuatu seperti ini dapat digunakan untuk mendapatkan
stdout
banyak proses dan menggunakannya dalam skrip viastdin
Ini akan menjadi skrip untuk menangani input Isi
multi-input.sh
:Sekarang ujilah:
Keluaran:
<()
mengubah proses menjadifile
penggunaan virtualfd
jika Anda mau, jadi<
diperlukan untuk membacanya.cat
itu sendiri tidak memerlukannya karena ia melakukan apa yang dilakukannya, menyatukan file, virtual atau nyata.sumber