GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengarahkan output dari suatu perintah ke file ketika perintah tersebut akan meminta input pengguna?

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.

Linux
  1. Cara Mengarahkan Output ke File dan Stdout di Linux

  2. Bagaimana Cara Mengarahkan Output Program Ke File Zip??

  3. Bagaimana cara menangkap output dari perintah teratas dalam file di linux?

  1. Cara Menyimpan Output Perintah ke File di Linux

  2. Cara Menggunakan Perintah Tar di Linux

  3. Bagaimana cara menyimpan output dari perintah awk ini ke file?

  1. Bagaimana Cara Menetapkan Output Perintah Ke Variabel Shell?

  2. Bagaimana cara menambahkan output ke file?

  3. Bagaimana cara mengarahkan output dari system() ke file?