Bagaimana saya bisa menyimpan konten yang saya baca dari pria setelah saya berhenti?

24

Jadi kami menggunakan man whateveruntuk mendapatkan penggunaan dan info lain tentang whateverperintah, ketika bagian yang relevan dari info ditemukan, saya ingin keluar dari manperintah dengan info yang tersisa di layar. Jadi saya bisa mengetik perintah selanjutnya dengan wasit di atas. Tetapi manperintah berhenti seluruh layar untuk memulihkan layar lama yang mirip dengan vim. Apakah ada cara untuk mencapai ini?

NathaneilCapital
sumber
Semua saran bagus, tetapi Anda juga bisa membuka jendela kedua untuk melihat halaman manual. Dan mungkin ada juga pemirsa halaman manual GUI.
Barmar

Jawaban:

38

Saya percaya ini bukan tentang mandirinya sendiri tetapi tentang pager pilihan Anda ( PAGERvariabel lingkungan) dikombinasikan dengan terminal yang digunakan.

Saya menduga pager Anda mungkin less(pager default khas saat ini dan cocok dengan deskripsi).

lessmemiliki opsi -Xyang dapat memberi Anda perilaku sesuai apa yang Anda cari.

   -X or --no-init
          Disables sending the termcap initialization and deinitialization
          strings  to  the  terminal.   This is sometimes desirable if the
          deinitialization string does something unnecessary, like  clear‐
          ing the screen.

Misalnya PAGER="less -X" man mandapat digunakan untuk mengujinya, dan jika Anda menemukan perilaku ini lebih baik Anda dapat mempertimbangkan pengaturan PAGERnilai ini secara permanen.

Håkan Lindqvist
sumber
Sayangnya itu mengacaukan riwayat gulir.
musiKk
@musiKk Bekerja dengan baik untuk saya di Ubuntu 16.04 dengan terminal unicode yang cerdas (bukan konsol Linux) dan man 2.7.5
cat
3
@musiKk: jika Anda ingin dapat menggulir kembali halaman manual setelah keluar dari halaman, Anda harus membatasi diri Anda untuk menggulir maju ke halaman manual (berdasarkan garis atau halaman), bukan akses acak yang biasa.
Peter Cordes
1
Atau Anda dapat menggunakan LESS=-X, untuk menghindari perubahan PAGER(Saya tidak percaya 100% untuk bekerja di semua program dengan ruang seperti itu, meskipun itu bekerja pada manusia.)
Random832
11

Jika Anda kurang menjalankan pager Anda (yang sangat umum), Anda tidak perlu berurusan dengan memodifikasi pager Anda, cukup lakukan pengalihan I / O:

man <whatever you want to man> | cat -

Ini akan mencetak salinan ke terminal sehingga Anda dapat menggulir ke atas saat Anda membutuhkannya.

Brennen Smith
sumber
1
Salah satu masalah dengan pendekatan ini adalah bahwa dengan halaman manual yang panjang, mungkin sulit untuk menggulir kembali ke bagian yang menarik bagi Anda dan Anda tidak akan melihat bagian itu dan baris perintah saat ini.
jlliagre,
Tidak ada saran lain yang mengatasi masalah ini - hanya ada di jendela konsol tunggal. Tetapi dengan mengatakan bahwa Anda selalu dapat menulis perintah Anda, gulirkan sedikit, dan gulir kembali ke perintah setengah tertulis Anda.
Brennen Smith
Saran saya pasti mengatasi masalah ini. Anda meninggalkan perintah man ketika halaman manual yang Anda minati ada di layar dan Anda bisa mengetik perintah Anda dengan halaman itu masih terlihat di layar yang sama.
jlliagre,
2
-menandakan standar dalam tetapi catmengasumsikan itu
loa_in_
1
Ini sebagian besar untuk semantik - saya selalu ingin menjadi eksplisit dengan stdin.
Brennen Smith
5

Karena tidak hanya lesstetapi juga aplikasi teks lain seperti vimmemperlihatkan fitur yang sangat menjengkelkan yang sama, apa yang saya lakukan hanyalah menghilangkan kemampuan terminal untuk mendukung perintah yang terlibat dari terminfodatabase.

Perintah-perintah ini adalah smcupdan rmcup, yang dirancang untuk memungkinkan pengaktifan dan pemindahan tempat cupperintah (posisi kursor) diizinkan.

Ini adalah fungsi shell yang saya gunakan untuk mengotomatiskan tugas, ia bekerja setidaknya dengan Solaris dan kemungkinan besar distribusi Linux:

fixterminfo()
{
  (
    [[ ! -d /tmp/terminfo ]] && { mkdir /tmp/terminfo || return ; }
    cd /tmp/terminfo || return
    TERM=xterm infocmp > xterm.src.org
    sed -e 's/rmcup=[^,]*,//'  -e 's/smcup=[^,]*,//' xterm.src.org > xterm.src
    if diff xterm.src.org xterm.src
    then
      echo xterm terminfo already patched
      return
    fi
    TERMINFO=/tmp/terminfo tic xterm.src
    if [ -f /usr/share/lib/terminfo/x/xterm ] ; then
      XTERM=/usr/share/lib/terminfo/x/xterm
    else
      if [ -f /lib/terminfo/x/xterm ] ; then
        XTERM=/lib/terminfo/x/xterm
      else
        if [ -f /usr/share/terminfo/x/xterm ] ; then
          XTERM=/usr/share/terminfo/x/xterm
        else
          echo xterm terminfo not found ; return
        fi
      fi
    fi
    if [ ! -f ${XTERM}.org ]
    then
      sudo cp ${XTERM} ${XTERM}.org || return
    fi
    cat /tmp/terminfo/x/xterm | sudo dd of=${XTERM}
  )
}

Jika entri terminal Anda tidak mundur xterm, Anda harus mengganti xtermdengan nama terminal yang tepat dalam skrip.

Jlliagre
sumber
1
Ya tapi kemudian ini merusak program lain (belum tentu pager atau kutukan, tetapi editor seperti membaca dll)
cat
1
@cat Bukan berarti saya memeriksa yang sudah ada, tapi saya tidak pernah melihat ada masalah dengan program lain setelah menggunakan solusi ini. Apakah Anda memiliki contoh program yang akan berperilaku aneh? Saya juga curiga jika mereka gagal, itu masalah di pihak mereka. Emulator terminal tidak seharusnya mendukung setiap kemampuan terminfo di luar sana. Itu hanya mengiklankan mana yang didukung dan terserah aplikasi untuk menghadapinya.
jlliagre
3

Anda dapat menyalurkan output ke catperintah

man man|cat

atau gunakan itu bukan pager default, seperti dalam contoh ini yang memanggil manusia itu sendiri:

PAGER=cat man man
SimoneLazzaris
sumber
2

Tanpa memodifikasi pager, solusi dengan pipa yang dapat bekerja di sebagian besar lingkungan:

Contoh untuk man ls

  • Meninggalkan seluruh manusia halaman di layarman ls | cat
  • Baca output pria paginasi , dengan kemungkinan meninggalkannya kapan saja dengan q :man ls | more
  • memfilter konten manusia dengan pola dan menjaga garis yang cocok di layar:man ls | grep somestring
marcanuy
sumber
-3

ini tahun 2016, cukup buka terminal atau tab atau jendela kedua atau baca pria itu secara online ..

pengguna362328
sumber
Dan ini adalah solusi praktis yang jelas.
Braiam
1
@Braiam Tidak praktis jika terminal ada di layar ponsel.
NathaneilCapital
@NathaneilCapital Kedengarannya sudah waktunya untuk belajar tmux.
Michael Hampton
-3

Bahkan di server saya (FreeBSD) saya menginstal X dan xfce. Lalu saya mengalokasikan buffer besar (misalnya 10.000 baris) untuk emulator terminal sehingga saya dapat sepenuhnya menggulir halaman manual di salah satu dari mereka, dan menggunakan instance terminal terpisah untuk merakit perintah. Berhasil.

MMACD
sumber