Rubish shell arayüzü, Ruby kod entegrasyonu ve method zincirleme özelliklerini gösteriyor.

Rubish: Ruby ile Güçlendirilmiş Yeni Nesil UNIX Shell Deneyimi

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 rubish

Kaynak 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/rubish

bin/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, while ve until gibi 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, .select gibi 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...end fonksiyonları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_load kullanarak 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 -r komutu kullanılabilir.
  • Zsh Uyumluluğu: Tam Bash uyumluluğuna ek olarak setopt, compdef, %X prompt 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/profile veya ~/.rubish_profile (ya da ~/.bash_profile / ~/.bash_login / ~/.profile).
  • Etkileşimli Shell’ler: ~/.config/rubish/config veya ~/.rubishrc (ya da ~/.bashrc), ayrıca projenize özel ./.rubishrc.
  • Çıkış: ~/.config/rubish/logout veya ~/.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.

Comments

No comments yet. Why don’t you start the discussion?

    Bir yanıt yazın

    E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir