Sık kullanılan komutlara hızlı bir şekilde nasıl kaydedilir ve erişilir?


37

Rutin olarak, en ufak bir değişiklikle, yürütmem gereken çok fazla emir var.

Şu anda hepsini saklıyorum .bash_historyve kullanıyorum CTRL- Ronlara erişmek için ama daha iyi bir yol olup olmadığını merak ediyorum. Ne için bakıyorum:

  • Yeni bir komut eklemek kolaydır
  • Aranan bir komutu aramak ve yeniden çalıştırmak kolaydır
  • Önerilerde istenmeyen komutlardan kaçının

Birkaç yaparsanız: Maalesef, bash_history dosyası üçüncü talep üzerine bu kadar güçlü değildir cdve lsçabuk geçmiş dosyası doldurur. Kısa bir süre HIST_SIZEönce, yinelemelerden veya belirli komutlardan kaçınmak için geçmişi yapılandırabileceğinizi öğrendim , ancak hepsini yapılandırmadan önce, bunun en iyi yol olduğundan emin olmak istedim.


7
günlük emirler için, aliasbelki daha faydalıdır. Örneğin. alias gfc="git fetch origin"
number5

Yanıtlar:


20

Aşağıdaki okuma satırı komutlarını çok yararlı buluyorum

history-search-backward,
history-search-forward

(her zamanki farklı farkında reverse-search-history, forward-search-history, bağlı Ctrl- R, Ctrl- S).

Aşağıdaki komutları aşağıdaki satırlara koyup Ctrl- Upve Ctrl- ile ilişkilendirdiğim komutlar var :Down~/.inputrc

"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

Nasıl çalışır? Komuta basın başlangıcının yazma kaç karakter Ctrl- Upve bu önek ile başlayan bir sonraki eski komut gösterilir, yeniden basın sonraki ve bu yüzden görmek için. Memnun kaldığınızda, muhtemelen komutu değiştirdikten sonra, Enteryürütmek için tuşuna basın .


1
Bunun için +1, aynı şeyi ben de sadece benim için çalışan Yukarı Ok ve Aşağı Ok tuşlarına (CTRL değiştirici yok) bağlı tutmama rağmen. Aynı şekilde ihtiyacınız olan hatları da yapmak istiyorsanız, "\e[B": history-search-forwardve"\e[A": history-search-backward
Simon Whitaker,

Ayrıca , arabellek yeterince büyük olduğundan emin olmak için büyümeyi HISTFILESIZEve / veya HISTSIZE(yalnızca zsh destekler HISTSIZE, bash her ikisini de destekler) düşünün . SO soru bash HISTSIZE vs HISTFILESIZE? daha fazla aydınlatabilir.
Adam Katz,

56

Başka bir ipucu: Bazen bir komutu yer imlerine eklemek / etiketlemek için yorumları kullanırım:

my_command #bookmark

sonra:

[ctrl-r]#bookmark

Bayıldım - güzel.
Greg,

17
Bashtags! Cin. :-)
Simon Whitaker,

Çok hoş! Bunu da mysql-
cli'm

Bu mükemmel! Ne yazık ki, zshell etkileşimli bir oturumda bir yorumun başlangıcı olarak # değerini göstermez. Bunun için benzer bir numara biliyor musunuz?
Nathan Long

1
@NathanLong: $_bookmark. Bunun, varolmayan değişkenlerin hiçbir şeye genişlememesi gerçeğinden istifade eden korkunç bir hack olduğu söylenebilir, ancak boşluklara izin verilmediği ihmaliyle kesinlikle işe yarar (bunun yerine _'leri kullanın).
kampu

7

Çok sınırlı bir kapsam olsa da, bu iki genişleme yer tutucusuna dikkat çekmek istiyorum:

!! 

son komut için bir yer tutucu genişletmedir. Komuttan sudoönce koymayı unuttuysanız kullanışlıdır.

!$ 

son parametreyi tekrarlar. İle farklı bir komutu tekrarlamak istiyorsanız Faydalıa/very/long/path/name/you/do/not/want/to/type/again


Evet, harika bahşiş ... eğer onları kullanmayı hatırlarsam :)
Jeach

6

'Takma adı' kullan

alias bunun için harika bir araçtır.

  • Geçerli kabuk oturumu sırasında kullanılacak komut satırında kolayca bir tane belirleyebilirsiniz.
  • Gelecekte kullanacaksanız, kabuk yapılandırmanıza ekleyebilirsiniz.

Bir takma ad kullandığınızda, aynen yazmışsınız gibi olur, bu yüzden oldukça esnektir. Örneğin, borularla kullanabilirsiniz:

alias findfoo="grep 'foo'"
echo 'foo1 \n foo2 \n bar1 \n bar2 \n foo3' | findfoo # Does your custom grep

Belirlemediğiniz bayrakları geçerek "küçük değişiklikler" yapabilmelisiniz.

echo 'foo1 \n foo2 \n bar1 \n bar2 \n foo3' | findfoo -v # finds non-matches

5

Sık yaptığım komutlar için minimal kabuk komutları yaratıyorum ve onlara kısa isimler veriyorum. Hepsi eklenmiş aynı yerde saklanır PATH.

Bu şekilde, çok karmaşık komutlara kısayol erişimine sahibim ve aksine, aliasgörevimin değiştirilebilir kısımlarını kısayolumun komut satırı argümanlarına dönüştürebiliyorum.


3
Sadece argümanları iletmek istiyorsanız, bunun yerine fonksiyonları tanımlamayı düşünün. Tam komut dosyalarına ihtiyacınız varsa, bu iyi bir çözümdür :)
Konerak

@Konerak Bunu denemek zorundayım. Genelde sadece bir senaryo yazarım, ancak fonksiyonları tanımlamak çok daha temiz olurdu, iddiaya girerim.
ixtmixilix

4

Git'te .bash_history'nin bir kopyasını saklıyorum . Bunu kolaylaştırmak için belirledim

# don't put duplicate lines in the history
# don't save commands which start with a space
HISTCONTROL=ignoredups:erasedups:ignorespace

# append to the history file, don't overwrite it
shopt -s histappend

içerisinde .bashrc ve aşağıdaki komutları bir de (genel kullanım için tadil edilmiş) temizleme komut

# Ensure a single space at the end of each line to easier add more parameters
sed -i -e 's/ *$/ /' "~/.bash_history"

sort --unique --output="~/.bash_history" "~/.bash_history"

ki satır eklemeden önce çalıştırıyorum git gui. Geçmiş dosyası her komutla değiştirildiğinden, bu depoyu güncellemek için özel bir komut aldım:

git stash && git pull && git stash pop

Öncelikle bahsetmek için +1 HISTCONTROL=ignorespace, bazen tarihin karmaşasını engellememek için önemlidir
quodlibetor

2

Tarihle ilgili diğer tüm cevaplar arasında.

Ayarladım

HISTFILESIZE=2024
HISTSIZE=1024

~ / .bash_profile içinde

Diğer yorumlara ek olarak: tarih

Başka bir kullanışlı özellik ...

Bir tarih hatırlamak ile hatırlayın

!first few letters<ESC>Ctrl-E

ilk birkaç harften başlayan son komutu hatırlayacaktır.

Örneğin:

!find<ESC>Ctrl-E

Bir GUI veya sadece komut satırı kullanıp kullanmadığınızı söylemediniz. Bir GUI kullanıyorsanız, yaygın olarak kullanılan komutları, kullanıcı adlarını, şifreleri, URL'leri vb. Kopyalamak / yapıştırmak için kalıcı pano yöneticilerinden birini kullanabilirsiniz.


Vay, !find<ESC>CTRL-Eçalışıyor ama yarın hatırlayabileceğimden şüpheliyim. Bu ESC CTRL-E nedir?
Konerak

genişletilmiş bir anahtara sadece bir bağ
bsd

0

Geçmişi aradığınız komutları kullanmayı Ctrl-Rve Ctrl-Saramayı kolayca aramanıza izin verir ve yinelemeleri yoksaymak ve bash geçmişi dosyasının sitesini değiştirmek için HISTCONTROL ortam değişkenini zaten buldunuz.

Genellikle birçok yapmak Ctrl-Rizledi Ctrl-Eve bazı parametrelerini değiştirmek, ben vurarak bir tespit komutu atlanır eğer Ctrl-R, bir çok kez Ctrl-Skurtarmak için.


2
Genellikle tty, Ctrl-S'nin "dur" dizisi olduğu ve ileri arama için (doğrudan) kullanılamayacak şekilde kurulur.
enzotib

Bu gibi durumlarda ileri arama, <kbd> Ctrl-S </kbd> dışında bir şeye tekrar gönderilebilir.
Evgeny

0

Daima son kullanılan komutları ve bunların çıktılarını saklamayı tercih ederim.

script filename

0

Yukarıdaki iyi cevaplara ek olarak, kde veya cüceye dayalı bir gui kullanıyorsanız, AutoKey şaşırtıcı şekilde yardımcı olabilir.

https://code.google.com/p/autokey/

Birkaç karakter yazarak veya bir kısayol tuşuna basarak tetiklenen ifadeler oluşturmanıza olanak sağlar. Bu ifadeler daha sonra yerine yazılır veya girilir.

Ayrıca python biliyorsanız, neredeyse her şeyi yapabileceğiniz python ile yazılmış komut dosyalarını destekler. Henüz python'u tanımıyorum, ancak çok güzel şeyler yapmak için çok basit komut dosyaları alıyorum.

Her şey klavyenizden geliyor gibi görünmektedir, bu nedenle klavye girişini kabul eden herhangi bir uygulama ile - ve masaüstünüzün kendisi ile çalışır.

Bunların nasıl ve nereye aktive edileceğini kontrol eden birçok seçeneğe sahiptir, bu nedenle sadece konsolunuzda çalışan bazılarını ve sadece başka bir pencerede çalışan diğerlerini kullanabilirsiniz. İfadeleri, onları tetikleyen dizeyi yazdığınız anda çalışacak şekilde ayarlayabilirsiniz veya Tamam'ı verinceye kadar bekleyin.


0

Diğerlerinin dediği gibi, takma isim senin arkadaşın. Biraz daha karmaşık şeyler için (öğretim arasında bir yerde tartışmalara ihtiyacınız olduğunda).

function ff() { find . -iname "*$**" }

Bulmak gibi çalışır (nedense db uygun olmadığında kullanıyorum). Veya

function chuck() { ps aux | grep $1 | tr -s '\t' ' ' | cut -f2 -d' ' | xargs kill $2 }

killall yerine.


0

Cntl-RGeriye bakmak için kullanmanın yanı sıra .bash_history, / ~/developgibi uzun komutları koyduğum dizinde bir README dosyası da var , bu yüzden gerektiğinde daha sonra geri gelebilirim. Benzer şekilde, yeni bir Linux / Ubuntu sürümü kurduktan sonra yüklediğim tüm ortak paket adlarını koyacak bir dosya bulmayı da planlıyorum . Bu nedenle fikir, her dizinde örneğin bir Video, Ses, gibi bir README dosyasına sahip olmak ve onlara daha sonra bilmeniz gerekebilecek ortak komutları / ipuçlarını koymaktır.gitsvn~/install/README

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.