Bir dizi bash geçmişini görüntüleyin


30

historyHepsini komut listeleri geçerli oturum için tarih. Sevmek:

1 ls 
2 cd /root
3 mkdir something
4 cd something
5 touch afile
6 ls
7 cd ..
8 rm something/afile
9 cd ..
10 ls
11 history

İlgilendiğiniz eşyaları aramak historyiçin grepbenzeri malzemelerle bağlantı kurabiliyorum

history | grep ls
1 ls
6 ls
10 ls

Ayrıca şu son 3 komutu da izleyebilirim:

history 3
11 history
12 history | grep ls
13 history 3

Ancak, belirli bir tarih aralığını nasıl alabilirim? Örneğin, şöyle bir şey:

history range 4 7
4 cd something
5 touch afile
6 ls
7 cd ..

Son xkomutları daha sonra listeleyebilirsin head.
Bratchley

@Bratchley: Bunun için kaç son komuta gideceğimi bilmek zorunda kalacağım. Bunu göz önünde bulundurursam history | grep something, tarihimde numaralandırılmış komutların sonuçlarını gösterir 123 234 345ve yürütülen son komutun sayısını bilmeyebilirim ( historybu durumda). Son emrim 400, 500 ya da her neyse numaralandırılabilir. Öyleyse önce bu numarayı kontrol etmeliyim, farkı bulmalıyım, son xkomutları listeleyeceğim ve sonra boruyuhead
Slartibartfast

Yanıtlar:


52

Bunun yerine, menzili seçmenize izin veren historykullanabilirsiniz fc:

fc -l 4 7

4
En sondan sayılacak negatif sayıları bile kabul eder fc -l -16 -10.
Franklin Yu

hmm, neden gerçek komutun argümanları yerine yepyeni bir komuta ihtiyacımız olduğunu merak ediyorum ...
Ringo

10

Eğer varsa gerekir sed veya awk yoluyla geçmiş komutu, boru kullanmak:

history | sed -n '10,20p'

history | awk 'NR >= 10 && NR <= 20'

Aksi halde cuonglm'in cevabı daha iyi bir seçenektir.


6
Kötü alternatifler içinde olduğumuzdan, bu sorunu daha da zarif bir şekilde bir arada headve tailbu problemi çözeceğiz. 10-> 25 aralığı için kullanmak zorunda kalacaksın history | head 25 | tail 15.
Aaron,

1

Komutun etrafındaki satır numaralarını bir grep ile birlikte kullanmak , aradığım en iyi iş.

Mesela etrafımda neler yaptığımı ping mybox, aşağı yukarı 20 çizgiyi arıyorum .

$ history | grep "ping mybox" 20325 ping mybox

Bu çizgi 20325, [20320..20339]aralıktaki bir sayı ile başlayan çizgileri tutmam gerekiyor .

$ history | grep ^203[2-3][0-9]


(1) “20 veya daha az” diyorsunuz, ancak örneğiniz −5 ve +14 gösteriyor. (2) Bu benim için işe yaramıyor, çünkü tarih numaralarının başlarında boşluk var gibi görünüyor.
Scott
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.