Benim bu, bir gönderme blogda birkaç ay önce, son bellek kadar öksürdü en iyi küçük dalaverecileri birine serin olduğunu sandığı bir fikir konumuna geldiğini kaydetti. Tam olarak buradan alıntı yapıyorum:
==================
Bash'de çok zaman geçiriyorum. Başlatılmamış olanlar için bash, çoğu unix makinesinde ve neyse ki bazı pencerelerde ve dışarıdaki her Mac'te bulacağınız bir sistemdir. İlk bakışta, bir komut satırı arayüzünden başka bir şey değil ve bu nedenle, bu tür şeyleri unutmayı tercih ettikleri bir anakronizm olarak gören çoğu kullanıcının radarının dışında.
Bash'de neredeyse her şeyi yapıyorum. E-POSTAMI BİR KOMUT HATTINDAN OKUYORUM, bu nedenle işaretli e-postalardan kaçınıyorum. Dizinlerde gezinirim, dosyaları düzenlerim, günlük kaynak kodu teslim alırım, dosyaları ararım, dosyaların içinde arama yaparım, makinemi yeniden başlatırım ve hatta bazen komut satırından web sayfalarına göz atarım. bash, dijital varlığımın kalbi ve ruhu.
Sorun şu ki, bir seferde yaklaşık 6 bash penceresine sahip olma eğilimindeyim. Bugün işte, biri bir web sunucusu çalıştırıyordu, diğeri veritabanımla uğraşıyordu, üçüncü, dördüncü ve beşinci farklı dosyaları düzenlerken, altıncı biri sistemdeki her dosyanın adlarını kaydetmeye çalışırken makinemden geçiyordu. Neden? Çünkü bir nesneyi dosya adına göre nerede bulacağınızı bilmek istiyorsanız böyle bir arşivde arama yapabilmek kullanışlıdır.
Bunu yaptığınızda, kontrol çubuğunuzda basitçe "bash" olarak adlandırılan birçok pencere ile karşılaşırsınız. Sadece bir tanesine sahipseniz bu sorun değil, ama 6 veya daha fazla varken acı çekiyor ... ve iki düzine başka şey oluyor. Bir klavye / fare çiftinin eşzamanlı komutu altında üç monitörüm var ve hala daha fazlasına ihtiyaç duyuyorum. Bu pencerelerin her birinin açık birkaç bash terminali vardır.
Bu yüzden bunu bir araya getirdim. Öncelikle, bu satırları .bash_profile dosyanıza yerleştirin:
export PROMPT_COMMAND='export TRIM=`~/bin/trim.pl`'
export PS1="\[\e]0;\$TRIM\a\]\$TRIM> "
trap 'CMD=`history|~/bin/hist.pl`;echo -en "\e]0;$TRIM> $CMD\007"' DEBUG
Tüm bunların nasıl çalıştığına ve tam olarak neden bu şekilde kurulduğuna dair düzinelerce paragraf yazdım, ama gerçekten ilgilenmiyorsunuz. Güven Bana. ...
O üçüncü satıra neden "CMD = ; echo ..." yaptığımla ilgili bir kitabın koca bir bölümü var . Pek çok kişi (diğer etki alanımın barındırıldığı bluehost dahil) hala kullanıyor ve tuzakları nasıl ele aldığı konusunda büyük hatalar içeren eski bash sürümünü kullanıyor, bu yüzden buna bağlı kaldık. Bash sürümünüzde güncel iseniz ve araştırma yapmak istiyorsanız CMD'yi kaldırabilir ve $ BASH_COMMAND ile değiştirebilirsiniz.
Her neyse, kullandığım ilk komut dosyası burada. Makul bir uzunluğa indirilmiş, makine adınızı ve dizininizi içeren güzel bir komut istemi oluşturur:
============trim.pl===========
#!/usr/bin/perl
#It seems that my cygwin box doesn't have HOSTNAME available in the
#environment - at least not to scripts - so I'm getting it elsewhere.
open (IN, "/usr/bin/hostname|");
$hostname = <IN>;
close (IN);
$hostname =~ /^([A-Za-z0-9-]*)/;
$host_short = $1;
$preamble = "..." if (length($ENV{"PWD"})>37);
$ENV{"PWD"} =~ /(.{1,37}$)/;
$path_short = $1;
print "$host_short: $preamble$path_short";
==============================
Bu blog gönderisinin üstünde, "Neden HOSTNAME ortam değişkenini @ENV aracılığıyla kullanmadınız?" Gibi aptalca sorular sormaya başlamadan önce okumanız gereken bir uyarı var. Basit: Çünkü bu, denediğim tüm sistemler için çalışmıyor.
Şimdi gerçekten harika kısım için. .Bash_profile eklemesinin 3. satırını hatırlıyor musunuz?
trap 'CMD=`history|~/bin/hist.pl`;echo -en "\e]0;$TRIM> $CMD\007"' DEBUG
Trim.pl komut dosyası çıktısını eskisi gibi aynı kaba döküyor, hem komut istemine hem de pencere başlığına yazdırıyor, ancak bu sefer az önce yazdığınız komutu ekliyor! Bu yüzden bunların hepsini .bashrc dosyanızda yapmak istemezsiniz: çalıştırdığınız herhangi bir komut dosyası (benim makinemde, adam onlardan biridir) bu şeyi her satırda tetikleyecektir. Adamın çıktısı burada yaptığımız şey yüzünden ciddi şekilde bozulur. Terminalle pek iyi oynamıyoruz.
Az önce yazdığınız komutu almak için, bash'ın geçmişini alıp biraz parçalara ayırıyoruz:
===========hist.pl============
#!/usr/bin/perl
while (<STDIN>)
{
$line = $_
}
chomp $line;
$line =~ /^.{27}(.*)/;
print $1;
==============================
Şimdi, bazilyon pencerem var ve şöyle şeyler söylüyorlar:
castro: /home/ronb blog
Ron-D630: /C/ronb/rails/depot script/server
Ron-D630: /C/ronb/rails/depot mysql -u ron -p
Ron-D630: /C/ronb/rails/depot find . > /C/ronb/system.map
Ron-D630: /C/ronb/rails/depot vi app/views/cart.html.erb
Ron-D630: /C/perforce/depot/ p4 protect
Ron-D630: /C/perforce/depot/ p4 sync -f
Ron-D630: /C/perforce/depot/
Şimdi ekranın altındaki mutlu küçük çubuktan hangisinin hangisi olduğunu bir bakışta anlayabiliyorum. Ve PS1'i ayarladığımız için, bir komutun yürütülmesi biter bitmez, komut adı sadece trim.pl çıktısıyla değiştirilir.
GÜNCELLEME (aynı gün): Bu şeyler (.bash_profile girişleri) .bashrc'de denediğimde üzerime her türlü cehennemi koydu. .Bashrc dosyanız, bash'ı dil olarak her çağırdığınızda etkileşimli olmayan komut dosyaları tarafından yürütülür. Adamı kullanmaya çalışırken buna vurdum. Her türlü çöp (.bashrc'min tam metni ve kaçış karakterleri) man sayfasının en üstünde görünüyordu. Bu mücevheri, hepsini bir araya getirdikten sonra komut satırında hızlı bir 'adam adam' çağrısıyla test etmenizi öneririm.
Sanırım özel çöpü .bashrc dosyamdan alıp ait olduğu yere koyma zamanım geldi ...
Eskiden, bu sürecin bir noktasında kendimi 'insan tuzağı' yazarken buldum.