Menambahkan perilaku ekor saat masuk menambahkan garis kosong menjadi kurang

8

Saya suka less, yang dapat saya gunakan untuk mengikuti log dengan +Fbendera (atau ShiftFhotkey), mencari maju dan mundur, dan umumnya bergerak bebas melalui dokumen.

Tetapi ada satu hal yang hilang less: biasanya saya berada di akhir file, dan saya ingin melihat hal-hal baru terjadi. Di tail -fsaya hanya akan menekan enterbeberapa kali, dan baris log baru akan muncul dengan jelas dipisahkan dari baris lama.

Apakah mungkin menambahkan ini less? Bagaimana?

blueFast
sumber
Saya tidak berpikir Anda bisa melakukan ini, meskipun kadang-kadang saya akan melakukan echo -e '\ n \ n \ n \ n \ n' >> / dev / pts / 0 misalnya, itu tidak bersih tetapi setidaknya membiarkan saya memiliki titik referensi di mana saya tinggalkan ketika saya memalingkan muka.
David Houde

Jawaban:

6

Ini sebenarnya bukan tailperilaku - itu terminalnya. Tail hanya mengirim aliran output ke stdout, yang masuk ke terminal Anda, dan Anda memasukkan garis kosong di tengah output dengan menekan enter. Ekor itu sendiri sebenarnya tidak menerima input dari Anda sama sekali. Anda dapat mengetik apa pun yang Anda inginkan dan itu akan muncul juga.

less, bagaimanapun, adalah aplikasi konsol, dan dibutuhkan input dan proses itu. Ini mengelola konsol menggunakan urutan kontrol terminal, yang merupakan cara Anda dapat menggulir. Membiarkan Anda memasukkan karakter sewenang-wenang ke aliran akan mengacaukan tampilan, dan lagi pula menggunakan input Anda lebih sedikit untuk mengontrol program.

Sayangnya, sepertinya tidak ada cara untuk menandai posisi saat ini secara visual. Itu bukan permintaan fitur yang mengerikan, meskipun, dan kurang tidak masih mendapatkan fitur baru dari waktu ke waktu.

mattdm
sumber
Apakah Anda memiliki tautan untuk meminta fitur ini kepada yang kurang mantain?
blueFast
@gonvaled gnu.org/software/less
Michael Hampton
4

Saya menemukan pertanyaan Anda sambil mencari jawaban yang sama untuk diri saya sendiri.

Kecewa dengan jawaban yang diterima, saya menemukan solusi. Ini kurang dari ideal, tetapi memungkinkan saya untuk menandai posisi saya di log yang saya ikuti less, yang merupakan intinya.

Saya membuat skrip kecil yang dapat dieksekusi (saya menyebutnya marklog) dengan konten berikut, dan meletakkannya di jalur saya:

#!/bin/sh
echo >> $1
echo >> $1
echo >> $1
echo `date` ---------------------------------------------------------------------- >> $1
echo >> $1
echo >> $1

Tentu saja, ini hanya berfungsi jika Anda memiliki akses tulis ke file log - yang bisa menjadi pemecah kesepakatan dalam banyak situasi. Saya juga telah membuat versi ini yang saya gunakan untuk menulis ke file log yang saya tidak miliki (tetapi saya memiliki akses sudo):

#!/bin/sh
sudo sh -c "echo >> $1"
sudo sh -c "echo >> $1"
sudo sh -c "echo >> $1"
sudo sh -c "echo `date` ------------------------------------------------------------------------- >> $1"
sudo sh -c "echo >> $1"
sudo sh -c "echo >> $1"

Skrip-skrip ini hanya memberikan semacam jeda visual yang saya cari. Setidaknya ada 3 cara Anda dapat menggunakannya:

  1. Pada titik di mana Anda biasanya menekan enter beberapa kali saat menggunakan tail -f, alih-alih jalankan marklogdari terminal lain (memberikan path ke file log sebagai argumen).

  2. Gunakan CtrlZuntuk menangguhkan lesssehingga Anda dapat menjalankan skrip di jendela terminal yang sama, tetapi ketika Anda memposting ulang latar depan less(menggunakan fg, tentu saja), itu tidak akan lagi dalam mode 'ikuti', jadi Anda harus menekan ShiftFlagi ...

  3. Terakhir - dan ini mungkin cara yang paling nyaman, karena Anda tidak perlu mengetik path ke file log: Jalankan markloglangsung dari lessdengan mengetik !marklog %. Lessakan mengganti nama file saat ini dengan %. Namun, lesstidak akan menanggapi! ketika sedang dalam mode 'follow', jadi Anda harus menekan CtrlCdulu untuk keluar dari mode follow, jalankan !marklog %, lalu ShiftFlagi.

Dengan metode 3, Anda juga mendapatkan bonus tambahan dari riwayat perintah Less: Cukup tekan !dan kemudian gunakan panah atas untuk memilih perintah terbaru (bagi saya, selalu marklog).

Semoga ini bisa membantu seseorang sebanyak yang sudah membantu saya.

Lambart
sumber
1

Tekan Shift+ Fdi akhir file dan semakin sedikit yang akan mulai berfungsi sebagai tail -f.

kofemann
sumber
2
Tidak, tidak akan. Ini akan mengikuti baris baru, tetapi tidak akan berfungsi sebagai tail -f. Khususnya itu tidak akan menerima masukkan sebagai baris baru, yang merupakan satu - satunya poin dari pertanyaan saya. Selain itu, saya sudah menyebutkan Shift+Fdalam pertanyaan (dengan kesalahan kecil, saya harus mengatakan)
blueFast
1

Saya tidak berpikir Anda bisa melakukan ini. Saya telah menggunakan mdan 'untuk menandai tempat-tempat menarik dan kemudian kebagian lagi tetapi ini tidak memberi Anda pemisahan yang Anda minta. Mungkin sesuatu seperti multitail akan melakukan apa yang Anda inginkan.

user9517
sumber
-1

Jawaban dari Lambart membawa saya ke solusi favorit saya. Terima kasih kepada Lambart!

Cukup masukkan mode ikuti ctrlcdan masuk !printf "\n\n---$(date)---\n\n" >> %. Setelah itu Anda harus menekan entersekali lagi dan tekan shiftfuntuk mulai lagi mengikuti file.

iRaS
sumber