GNU/Linux >> Belajar Linux >  >> Linux

Secara otomatis menangkap keluaran dari perintah terakhir ke dalam variabel menggunakan Bash?

Ini adalah solusi yang benar-benar meretas, tetapi tampaknya sebagian besar berhasil beberapa waktu. Selama pengujian, saya perhatikan terkadang tidak bekerja dengan baik saat mendapatkan ^C pada baris perintah, meskipun saya melakukan tweak sedikit untuk berperilaku sedikit lebih baik.

Peretasan ini hanya merupakan peretasan mode interaktif, dan saya cukup yakin bahwa saya tidak akan merekomendasikannya kepada siapa pun. Perintah latar belakang cenderung menyebabkan perilaku yang kurang jelas dari biasanya. Jawaban lainnya adalah cara yang lebih baik untuk mendapatkan hasil secara terprogram.

Karena itu, inilah "solusinya":

PROMPT_COMMAND='LAST="`cat /tmp/x`"; exec >/dev/tty; exec > >(tee /tmp/x)'

Setel variabel lingkungan bash ini dan keluarkan perintah sesuai keinginan. $LAST biasanya akan memiliki keluaran yang Anda cari:

startide seth> fortune
Courtship to marriage, as a very witty prologue to a very dull play.
                -- William Congreve
startide seth> echo "$LAST"
Courtship to marriage, as a very witty prologue to a very dull play.
                -- William Congreve

Saya tidak tahu variabel apa pun yang melakukan ini secara otomatis . Untuk melakukan sesuatu selain hanya menyalin-tempel hasilnya, Anda dapat menjalankan kembali apa pun yang baru saja Anda lakukan, misalnya

vim $(!!)

Dimana !! adalah perluasan riwayat yang berarti 'perintah sebelumnya'.

Jika Anda berharap ada satu nama file dengan spasi atau karakter lain di dalamnya yang mungkin mencegah penguraian argumen yang tepat, kutip hasilnya (vim "$(!!)" ). Membiarkannya tanpa tanda kutip akan memungkinkan banyak file dibuka sekaligus selama tidak menyertakan spasi atau token parsing shell lainnya.


Linux
  1. Bagaimana Cara Menetapkan Output Perintah Ke Variabel Shell?

  2. Menyimpan Output Perintah Dalam Variabel Shell?

  3. Mengapa Mengatur Variabel Sebelum Perintah Legal Di Bash?

  1. Menggunakan Referensi Ke Variabel Bash String Di Sed?

  2. Bagaimana Menyimpan Pola yang Cocok Menjadi Variabel Menggunakan Perintah 'sed'?

  3. Menggunakan Perintah Nama Dasar Linux di Skrip Bash

  1. Di bash, apakah ada cara untuk mengulang/mencetak stdout terakhir? Apakah ada variabel yang ditugaskan ke stdout?

  2. Bash menangkap output dari awk ke dalam array

  3. Keluar dari kode penugasan variabel ke substitusi perintah di Bash