Menggunakan teks dari output perintah sebelumnya

16

EDIT April, 2015: Jika Anda memiliki pertanyaan yang sama, saya sarankan juga memeriksa http://xiki.org/


Saya tahu ini bukan bagaimana terminal bekerja, tapi saya sering berharap ada cara mudah menggunakan teks (menyalinnya, memodifikasi, dll) yang sudah ada di jendela terminal saya dari beberapa perintah keluaran sebelumnya.

Saya membayangkannya seperti ini:

Saya di bash shell saya akan memasukkan perintah dan saya menyadari saya perlu mengetik sesuatu yang sudah ada di layar beberapa baris di atas. Saya dapat meraih mouse dan memilihnya, tapi saya benci itu. Apa yang saya benar-benar harapkan saat ini adalah bahwa seluruh terminal saya menjadi buffer Vim raksasa, semuanya: prompt, perintah yang saya ketikkan, dan output dari perintah itu. Segala sesuatu. Dan kemudian saya dapat melompat beberapa baris ke atas, mungkin mengedit sedikit, dan menarik beberapa teks. Kemudian, kembali ke mode bash shell dan rekatkan apa pun yang saya tarik ke baris perintah saat ini.

Saya tahu ada beberapa opsi:

  • Tentu, pipa teks yang saya butuhkan langsung dari output perintah ke file, atau langsung ke perintah berikutnya. Tetapi untuk itu Anda harus merencanakan terlebih dahulu atau menjalankan kembali perintah dari histori Anda (seandainya output tidak akan berubah di antara permintaan).

  • Untuk meraih mouse dan memilih teks yang akan disalin. Lame, menjengkelkan, saya berharap saya tidak melakukan itu, (ini bukan situs pertukaran GUI, bukan? =)

  • Untuk menggunakan opsi "Ekspor teks sebagai ..." aplikasi Terminal saya (Mac OS X), dan simpan teks terminal ke file. Kemudian buka file dan bekerja dengannya. Hampir, tetapi mengapa harus melalui langkah menyimpan ke file di disk?

Jadi pertanyaannya adalah: Apa yang Anda lakukan dalam situasi ini? Apakah ada trik, alat, fitur shell yang dapat berguna dalam skenario ini? Apakah Anda cukup pasrah untuk menggunakan mouse atau mengetik ulang apa pun yang perlu Anda ketik?

Mungkin masalahnya adalah bahwa saya tidak melakukan hal-hal 'cara unix', tapi ayolah, ini 2010 dan saya tidak dapat dengan mudah menyalin beberapa teks beberapa baris dari kursor saya?

Sergio Acosta
sumber
stackoverflow.com/questions/5955577/...
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

4

Anda bisa menggunakan skrip (gunakan -f untuk memastikan itu memerah setiap kali) dan Anda dapat memiliki semua output dalam file.

Gunakan terminal multiplexer (layar, tmux dll). Misalnya, untuk layar http://web.mit.edu/gnu/doc/html/screen_11.html#

Perintah: salin Masuk ke mode salin / gulir mundur. Ini memungkinkan Anda untuk menyalin teks dari jendela saat ini dan riwayatnya ke buffer tempel. Dalam mode ini editor layar penuh vi-seperti aktif, dengan kontrol seperti diuraikan di bawah ini.

Multiplexer terminal lain pasti memiliki kemampuan lebih maju.

nc3b
sumber
Baik. Saya baru tahu bahwa 'Terminal Multiplexer' mungkin yang saya butuhkan. Terima kasih. Juga, terima kasih atas petunjuk perintah 'script'.
Sergio Acosta
5

Dalam tmux (terminal multiplexer) Anda dapat menekan Ctrl + A- [untuk beralih ke mode buffer Vi di mana Anda dapat menavigasi di sekitar layar, gulir buffer bolak-balik, menyalin teks dll. Pintasan default sebenarnya Ctrl + B- [tapi itu jelas dimaksudkan untuk dikonfigurasi ulang. Selain itu, mode buffer default adalah Emacs tetapi Anda dapat mengkonfigurasinya menjadi Vi.

Lihat tmux, ini benar-benar terminal multiplexer modern yang hebat. Selain bekerja dengan buffer, Anda dapat membagi layar dalam beberapa jendela, menyambung ke sesi yang sama dari beberapa terminal dll. Untuk kenyamanan terbaik Anda bahkan dapat menjadikannya shell login Anda jika Anda tahu apa shell aktual Anda.

Pada OpenBSD tmux bahkan menjadi bagian dari sistem basis.

Lihat halaman manual untuk tmux untuk lebih jelasnya. Lihat juga tangkapan layar di http://tmux.sourceforge.net/

zvolkov
sumber
tmux adalah yang paling keren!
gabe.
4

Dalam emacs, shell Mx menangani edisi dari output sebelumnya. Anda dapat dengan mudah menyalin tempel keluaran perintah sebelumnya, atau bagian mana pun dari buffer Anda, seperti buffer biasa. Saya cukup yakin harus ada setara vim.

elmarco
sumber
1
Itu sangat dekat dengan apa yang saya inginkan, tetapi saya harus sudah di Emacs atau Vim. +1
Sergio Acosta
Ya, itu bisa menjadi istilah + shell default Anda. :) Maka Anda akan menggunakan tombol navigasi teks yang biasa di sana sebagai minimum. Jika Anda mempelajari lebih banyak kunci khusus, maka fitur Emacs berikut eshellini dapat diakses .
imz - Ivan Zakharyaschev
1

Seperti yang disebutkan di sini, Emacs ' eshellbisa menjadi istilah + shell default Anda. :) Maka Anda akan menggunakan tombol navigasi teks yang biasa di sana sebagai minimum. Jika Anda mempelajari lebih banyak kunci khusus, maka fitur Emacs berikut eshellini dapat diakses:

imz - Ivan Zakharyaschev
sumber
1

Coba gunakan vim sebagai CLI Anda? Cukup pilih output dari beberapa baris ke atas dan pipa melalui:!.

Stephen M. Webb
sumber
Maaf, saya tidak mengikuti Anda. Bisakah Anda menguraikannya?
roaima