Secara default, hanya STDOUT
dialihkan dan/atau disalurkan. Yang Anda inginkan adalah meninggalkan STDOUT
sendirian, dan memiliki apa pun yang diteruskan melalui STDIN
dialihkan.
Jika mengedit the_command
adalah opsi, Anda dapat memastikan bahwa pertanyaannya adalah keluaran ke STDERR
sebagai gantinya (itu harus membuangnya ke layar terlepas dari pengalihan apa pun), dan kemudian menggemakan apa pun yang diketik pengguna kembali ke layar melalui STDOUT
.
Perintah Anda berfungsi dan mengalihkan output dengan benar ke file abc.txt
.
Pertanyaannya adalah bagaimana skrip Anda meminta input data dan bagaimana Anda menjalankan skrip?
Mari kita lihat dengan dua contoh:
# Script_1.sh # 1
echo Please, enter your firstname and lastname # 2
read FN LN # 3
echo "Hi! $LN, $FN !" # 4
dan
# Script_2.sh # 5
read -p "Enter a comment " CM # 6
echo "You said $CM" # 7
Jika Anda menjalankan /bin/bash Script1.sh > abc.txt
Anda tidak akan melihat pertanyaan "Please enter..." di tty Anda. Jika Anda akan memberikan input yang diharapkan dari keyboard, Anda akan menemukan output dari baris #2 dan #4 di abc.txt
Anda berkas.
Jika Anda menjalankan /bin/bash Script2.sh > abc.txt
Anda akan melihat pertanyaan "Masukkan komentar", tetapi Anda akan menemukannya di abc.txt
file hanya output dari baris #7.
Catatan:jika Anda menjalankan Script2,sh dalam sebuah subkulit
(bash Script2.sh 2>&1)> abc.txt
Anda tidak akan melihat keluaran apa pun pada tty dan Anda akan menemukan semuanya di abc.txt
mengajukan.
Jika Anda menjalankannya dengan
bash Script2.sh 2>ccc.txt 1>ddd.txt`
Anda akan menemukan keluaran Standar (baris #7) di ddd.txt
dan kesalahan standar (baris #6) diccc.txt
.
Jika Anda ingin mengalihkan hanya sebagian dari hasil perintah Anda Anda harus memodifikasi skrip Anda.
Salah satu caranya adalah dengan membuat fungsi untuk memindahkan bagian skrip yang akan menghasilkan output yang menarik (lihat di bawah). Kemudian Anda dapat memanggil fungsi ini dari bagian utama skrip Anda (di mana awalnya kode yang Anda pindahkan ke fungsi) hanya mengarahkan keluaran itu ke file log:
Part_To_Redirect(){
: # all that you want
}
# ... Main part of the script
# point where it was the part that generates the output
Part_to_Redirect "[email protected]" > abc.txt # this to store only that part in the file
# Part_to_Redirect "[email protected]" >> abc.txt # this to append that part in the file
# ...
Anda bahkan akan menemukan tee
yang berguna itu
mengalihkan output ke beberapa file, menyalin input standar ke output standar dan juga ke file apa pun yang diberikan sebagai argumen.
the_command | tee abc.txt # To redirect Standard output
or
the_command 2>&1 | tee abc.txt # To redirect err in out and both in the file
Dalam hal ini Anda akan memiliki output normal dari perintah Anda di tty, tetapi pada saat yang sama Anda akan menyimpan salinannya di file log abc.txt
. Seharusnya nyaman dalam kasus Anda jika Anda menggunakan read -p
seperti pada skrip2 doa the_command | tee abc.txt
.
Catatan dan referensi:
Menambahkan "[email protected]"
Anda dapat meneruskan semua argumen skrip Anda ke fungsi tersebut.
Anda mungkin tertarik untuk membaca lebih lanjut bashredirection dari banyak sumber di internet.
- Seperti yang disarankan oleh Scott dalam komentarnya, ada jawaban wiki dari Unix SE:titik awal yang baik.
- A harus
man bash
atau manual bash. - Bagi saya bab pengalihan dari bash-hacker berguna, di mana Anda juga dapat menemukan tautan ke penggunaan yang sudah usang.
- Anda juga dapat merujuk ke Panduan Pembuatan Skrip Bash Tingkat Lanjut, bab 20.