Saya memiliki skrip bash yang seperti berikut,
cat filename | while read line
do
read input;
echo $input;
done
tetapi ini jelas tidak memberi saya hasil yang benar seperti ketika saya membaca di loop sementara mencoba membaca dari nama file file karena kemungkinan pengalihan I / O.
Adakah cara lain untuk melakukan hal yang sama?
bash
while-loop
w2lame
sumber
sumber
Jawaban:
Baca dari perangkat terminal pengendali:
info lebih lanjut: http://compgroups.net/comp.unix.shell/Fixing-stdin-inside-a-redirected-loop
sumber
bash yourscript < /foo/bar
akan menunggu input pengguna, ini hanya dapat diterima saat membaca sandi. Jawaban dari @GordonDavisson lebih disukai untuk semua kegunaan lainnya.Anda dapat mengarahkan stdin biasa melalui unit 3 untuk menyimpannya di dalam pipeline:
BTW, jika Anda benar-benar menggunakan
cat
cara ini, gantilah dengan pengalihan dan semuanya menjadi lebih mudah:Atau, Anda dapat menukar stdin dan unit 3 dalam versi itu - baca file dengan unit 3, dan biarkan stdin saja:
sumber
read line
membaca dari notify-finish, tetapi jika Anda hanya menjalankannya seperti yang tertulisread -u 3 input
membaca dari konsol)?Sepertinya Anda membaca dua kali, pembacaan di dalam while loop tidak diperlukan. Selain itu, Anda tidak perlu menjalankan perintah cat:
sumber
read
perilaku batin sebagai "tidak benar [karena] mencoba membaca dari filefilename
") dan jawaban yang diterima.Coba ubah loop seperti ini:
Tes unit:
sumber
Saya telah menemukan parameter ini -u dengan read.
"-u 1" berarti "membaca dari stdin"
sumber
sumber