Bagaimana cara menggunakan `cat` atau` less` tergantung pada jumlah baris?

12

Saat melihat konten file, saya ingin catfile pendek secara otomatis tetapi lessyang melebihi ukuran layar. Saya bisa menggunakan sesuatu dengan wc -l, tetapi apakah ada cara yang lebih baik yang mungkin juga mempertimbangkan ukuran jendela / jumlah garis saat ini yang tersedia?

Tobias Kienzler
sumber
1
Sementara banyak alat melakukan ini, perhatikan bahwa itu merusak harapan. Yaitu pengguna tidak dapat mengetahui sebelumnya apa yang akan terjadi. Saya menemukan ini menjengkelkan misalnya di git logmana melakukan hal yang tepat ini. Anda tidak pernah tahu sebelumnya apa yang akan Anda dapatkan (apakah Anda harus memukul q?).
bitmask
4
CATATAN: Secara umum Anda harus menghindari menggunakan catuntuk melihat file. Biasanya Anda hanya perlu menggunakan catuntuk mengirim konten file ke stdout sehingga dapat disalurkan ke proses lain. Alasan untuk tidak menggunakan catuntuk melihat adalah mengirimkan byte mentah ke terminal, yang dapat menyebabkan perintah terminal yang tidak diharapkan dieksekusi (misalnya, beberapa pengguna terjebak ketika sebuah file berisi byte yang tepat untuk menonaktifkan keyboard terminal) . Anda biasanya harus menggunakan pager like lessatau editor, yang akan memformat karakter khusus untuk tampilan sehingga mereka tidak ditafsirkan oleh terminal.
Chris Page
2
Jika Anda akan menggunakan cat untuk melihat konten file secara langsung di terminal, setidaknya gunakan cat -vsehingga ia lolos dari karakter khusus.
Chris Page
@ Bitmask poin bagus, itu sebabnya saya bertanya Apakah membagi layar catmungkin? yang mungkin merupakan solusi yang lebih baik
Tobias Kienzler
Keyboard @ChrisPage saya tidak dibunuh, tapi saya pikir saya berhasil mengacaukan codepage sekali ... Terima kasih untuk menunjuk cat -vkeluar
Tobias Kienzler

Jawaban:

9

Untuk memberi Anda rumus yang melibatkan wcpemeriksaan berbasis:

(($(wc -l<input_file)<=$(tput lines))) && echo 'will fit' || echo 'not enough'

Ada $LINESvariabel shell yang juga bisa digunakan:

(($(wc -l<input_file)<=LINES)) && echo 'will fit' || echo 'not enough'

Tetapi $LINESdiperbarui hanya ketika di command prompt. Untuk memahami apa yang saya maksud, jalankan ini dan ubah ukuran jendela terminal selama sleep:

( sleep 3; echo $LINES; tput lines )
manatwork
sumber
Terima kasih, ini memiliki keuntungan yang dapat disetel untuk digunakan lessjika misalnya 2/3 dari layar digunakan oleh cat.
Tobias Kienzler
20

Mungkin 'less -F file_to_read' adalah pilihannya: ia keluar lebih sedikit jika jendela cukup untuk menampilkan semua file, dan menunggu pager jika tidak demikian halnya

Dom
sumber
kedengarannya bagus, tapi itu tidak menghasilkan apa-apa dalam kasus itu, dan kode keluar sama dalam kedua kasus
Tobias Kienzler
Saya hanya mencoba 'less -F / etc / passwd' dan ini menampilkan file dengan benar (dengan atau tanpa pager). Anda benar, kode kembali adalah 0 dalam kedua kasus.
Dom
11
Perintah itu berfungsi seperti yang diminta, tetapi dengan kesalahan kecil: itu membersihkan layar setelah menampilkan file. Menambahkan -Xopsi akan menghentikan pembukaan, jadi file pendek akan ditampilkan seperti cathalnya. Sayangnya dengan -Xlayar tidak akan dihapus juga setelah menampilkan file yang panjang dan digulir.
manatwork
1
@manatwork itu bagus, terima kasih. Tidak membersihkan layar sebenarnya ok, karena itulah yang akan (tidak) terjadi jika catdipanggil juga
Tobias Kienzler