Rubish Nedir? Ruby Destekli Güçlü Bir UNIX Shell
Rubish, tamamen Ruby ile yazılmış, güçlü ve yeni nesil bir UNIX shell’idir. Temel amacı, mevcut Bash betiklerini sorunsuz bir şekilde çalıştırırken, Ruby’nin esnekliğini ve zengin özelliklerini komut satırı ortamına entegre etmektir. Shell sözdizimi ayrıştırılır, Ruby koduna derlenir ve ardından Ruby VM (Sanal Makinesi) tarafından yürütülür.
Temel Konseptler ve Özellikler
Tamamen Bash Uyumlu
Rubish, Bash’in tüm özelliklerini destekler ve shell sözdizimi tamamen uyumludur. Mevcut Bash betiklerinizi hiçbir değişiklik yapmadan çalıştırabilirsiniz. Eğer Rubish’te çalışmayan bir Bash betiği ile karşılaşırsanız, bu bir hata olarak kabul edilir ve raporlamanız beklenir.
Derin Ruby Entegrasyonu
Rubish sadece Ruby ile uygulanmış bir shell olmakla kalmaz, aynı zamanda Ruby’yi derinlemesine entegre eden bir shell’dir. Shell komutlarını Ruby koduyla sorunsuz bir şekilde karıştırabilir, hatta bloklar, iteratörler ve kütüphaneler gibi Ruby’nin güçlü özelliklerini shell betiklerinizde kullanabilirsiniz.
Rubish Kurulumu
Homebrew (macOS)
macOS kullanıcıları için Homebrew ile kurulum oldukça basittir:
brew tap amatsuda/rubish
brew install --HEAD rubishKaynak Koddan Kurulum
Kaynak koddan kurulum için adımlar şunlardır:
git clone https://github.com/amatsuda/rubish.git
cd rubish
bundle install
bundle exec exe/rubishbin/rubish, kullanılabilir bir Ruby yorumlayıcısını kendi başına bulan (örneğin ~/.rbenv/shims/ruby, /opt/homebrew/bin/ruby, /usr/local/bin/ruby ve sistem Ruby’si) küçük bir Bash başlatıcısıdır. Bundler’ın mevcut olmadığı durumlarda, örneğin bir giriş shell’i olarak veya PATH‘in minimal olduğu yerlerde kullanılabilir.
Rubish Kullanımı
Rubish’i kullanmaya başlamak oldukça kolaydır:
- Etkileşimli Shell Başlatma:
rubish - Tek Bir Komut Çalıştırma:
rubish -c 'echo hello' - Bir Betik Çalıştırma:
rubish script.sh
Giriş Shell’i Olarak Ayarlama
Rubish’i giriş shell’iniz olarak da ayarlayabilirsiniz:
echo "$(which rubish)" | sudo tee -a /etc/shells
chsh -s "$(which rubish)"Bash’in Ötesindeki Rubish Özellikleri
Rubish, Bash uyumluluğunun yanı sıra geliştiricilere Ruby’nin gücünü doğrudan komut satırına getiren bir dizi benzersiz özellik sunar:
- Ruby Koşulları:
if,whileveuntilgibi koşullu ifadelerde Ruby ifadelerini{ }içine alarak kullanabilirsiniz. Shell değişkenleri otomatik olarak Ruby ifadelerinde yerel değişkenlere bağlanır. - Ruby Metot Çağırma Stili: Geleneksel UNIX stiline ek olarak, komutları parantezli Ruby metot çağırma sözdizimi ile çağırabilirsiniz (örn:
ls('-la')). - Metot Zincirleme: Komutlar, Ruby metotları ile nokta notasyonu kullanılarak birleştirilebilir ve bir boru hattı oluşturabilir (örn:
ls().sort.uniq). - Ruby İteratör Blokları:
.each,.map,.selectgibi Ruby iteratör metotları, komut çıktısını satır satır işlemek için bloklar alabilir. - Satır İçi Ruby Değerlendirmesi: Büyük harfle başlayan herhangi bir satır, doğrudan Ruby kodu olarak değerlendirilir.
- Ruby Dizi ve Regex Literalleri: Ruby dizi ve regex literatürleri shell bağlamında doğrudan kullanılabilir.
- Lambda İfadeleri: Ruby kodu, lambda ifadeleri (
-> { }) arasına alınarak yürütülebilir. - Ruby Tarzı Fonksiyon Tanımları: Standart shell fonksiyon sözdizimine ek olarak, Rubish adlandırılmış parametreler ve splat argümanlarla Ruby tarzı
def...endfonksiyonlarını destekler. - Özel Ruby Komut İstemi: Tam programatik kontrol için komut isteminizi bir Ruby fonksiyonu olarak tanımlayabilirsiniz.
- Tembel Yükleme (Lazy Loading): Yavaş shell başlatma işlemleri (örn:
rbenv init)lazy_loadkullanarak arka plan iş parçacığına ertelenebilir ve shell başlatma süresi anında hale gelir. - Kısıtlı Mod: Güvenilmeyen betikleri güvenli bir şekilde yürütmek için tüm Ruby entegrasyon özelliklerini devre dışı bırakmak üzere
rubish -rkomutu kullanılabilir. - Zsh Uyumluluğu: Tam Bash uyumluluğuna ek olarak
setopt,compdef,%Xprompt kodları ve kısaltılmış yol genişletmesi gibi Zsh tarzı özellikleri de destekler.
Yapılandırma Dosyaları
Rubish, çeşitli yapılandırma dosyalarını standart shell’ler gibi yükler:
- Giriş Shell’leri:
/etc/profile,~/.config/rubish/profileveya~/.rubish_profile(ya da~/.bash_profile/~/.bash_login/~/.profile). - Etkileşimli Shell’ler:
~/.config/rubish/configveya~/.rubishrc(ya da~/.bashrc), ayrıca projenize özel./.rubishrc. - Çıkış:
~/.config/rubish/logoutveya~/.rubish_logout(ya da~/.bash_logout).
Bir Ruby Programına Entegre Etme
Rubish, diğer Ruby programlarının (terminal emülatörleri, IDE eklentileri) bir Rubish oturumunu süreç içinde yönetebilmesi için genel bir API sunar. Bu, çatal-yürütme (fork+exec) veya JSON serileşmesi olmaksızın metot çağrılarıyla doğrudan etkileşim anlamına gelir.
Özel G/Ç Arka Uçları
Varsayılan Rubish::Frontend::Tty, Reline + stdin/stdout’u sarar. Kendi satır düzenleyicilerine sahip host’lar Rubish::Frontend::Base sınıfını alt sınıflara ayırabilir ve bir örneği REPL’e geçirebilir.
Alt Süreç Öncesi Çalıştırma Kancası
Her çatallanmış alt süreçte fork() ve exec() arasında kurulum kodu çalıştırmak için (örneğin, bir komut başına kontrol edici tty eklemek için) Rubish::Command.child_pre_exec_hook kullanılabilir.
Yerleşik Komutlar
Rubish, Bash ve Zsh’tan tanıdık birçok yerleşik komutu destekler. Bunlar arasında Dizin yönetimi (cd, pwd), G/Ç (echo, read), Değişkenler (export, unset), Süreç kontrolü (exit, kill), İş kontrolü (jobs, fg), Fonksiyonlar (function, return), Takma adlar (alias), Geçmiş (history), Yürütme (eval, source), Test (test, [[), Kontrol (break, trap), Tamamlama (complete), Yapılandırma (setopt), Bilgi (help, type) ve diğerleri bulunur.

