Uzun bir süre .bashrc dosyama yaptığım düzenlemelerin çoğu, sürekli kullandığım ve her seferinde yazmak istemediğim anahtarlar için küçük kısaltmalardan ibaretti; tıpkı ls -la gibi. Ayrıca birkaç git kısaltması ve fonksiyonlara dönüştürdüğüm bazı zincirleme komut da içeriyordu. Bunlar hoş birer artıydı ve ben de kısaltma oluşturarak çıkarabileceğim rahatlığın neredeyse tamamını zaten elde ettiğimi sanıyordum.
Daha çok kısaltma oluşturmamı engelleyen temel şey, yaptığım rutin işlerin çoğunun yalnızca statik komutlara yönlendiren kısaltmalardan yararlanamamasıydı. Bazen belirli bir sırayla işlem yapmam gerekir ya da bir komut, çalıştırma seferlerine göre değişen belirli argümanları alması gerekir.
Sonunda bu sorunu, alias sistemimdeki her şeyi fonksiyonlara bağlayarak çözdüm. Artık hepsine, kendi baş harflerimden dolayı, yazması hızlı ve unutulmaz olduğu için kb adını verdiğim aynı iki harfli komutla erişebiliyorum.



Kısaltmalar belli bir noktaya kadar işe yarar
Mantık eklemeniz gerekiyorsa fonksiyonlar daha iyidir
Kısaltmalar işe yarar, ama son derece basittirler. Aslında yaptıkları şey dizge değiştirmedir. Neredeyse herkesin bildiği yaygın bir örnek ll’dir; kabuk, komutu çalıştırmadan önce onu ls -la olarak genişletir. Birkaç tuşa basmayı sağlar, ama davranışı değiştiren bir koşul ya da argüman eklemeniz gerektiğinde o kadar da yararlı değildir.
Fonksiyonlar buna karşılık, bir komuta ya da komut dizisine mantık eklememizi sağlayan mini Bash betikleridir. Dinamiklerdir; farklı dizinlerden ya da farklı koşullar altında çağrılmaları sonucu değiştirebilir. Projemi başlatan komut bunun güzel bir örneğidir:
proj
() {
cd
~/dev/
$1
&&
source
venv/bin/activate && tmux new -s
$1
}
Hangi komutu manuel olarak kaç kez yazdığımı sayamam, hepsini bir fonksiyonun içine koymadan önce. Şimdi yapmam gereken tek şey proj yazıp bir argüman vermek (bu durumda budget), böylece doğru proje dizinine gitmek, sanal ortamı aktifleştirmek ve aynı isimle yeni bir tmux oturumu açmak.
Bu noktada, iş akışımın en yaygın kısımlarını kapsayan bir düzine yakın fonksiyon biriktirdim. Yedekleme için biri, dosya transferi için biri, farklı sunuculara SSH ile bağlanmak için biri ve hatta YouTube‘dan video indirmek için biri dahil olmak üzere birçoğu var. Tüm özel takma adlarımı ve fonksiyonlarımı ayrı bir .bash_shortcuts dosyasında tutuyorum ve bunu .bashrc dosyasının en başında source ile yüklüyorum. Böylece her şeyin daha taşınabilir ve düzenli olduğunu düşünüyorum.
Bir yönlendirici takma adlarımı temizlememe yardımcı oldu
Artık bir şeye ne isim verdiğimi unutsam önemli değil
40’dan fazla takma ad ve fonksiyona sahip olmanın sorunu, bunların bazılarına ne isim verdiğimi kaçınılmaz olarak unutmam. Bu özellikle her iki haftada bir kullandığım birkaç tanesi için geçerli. Bu sorunun çözümü, argümanları şöyle bir case ifadesi üzerinden yönlendiren iki harfli yönlendiricim:
kb
() {
case
“
$1
“
in
deploy) ./deploy.sh
“
$2
“
;;
backup) rsync -a ~/data/ /mnt/
$2
/ ;;
sync
) git pull && git push ;;
*)
echo
Bilinmeyen komut:
$1
“
;;
esac
}
Yukarıdaki kod, nasıl çalıştğına dair bir fikir edinmeniz için basitleştirilmiş bir örnek. Yani kb backup external yazsaydım, rsync dosyaları veri dizinimden takılı olan harici diskime gönderirdi.
Bu takma adların hepsi için bir yönlendirici kullanmanın iki nedeni var. İlki, gerçek komutlarla çışma konusunda endişelenmememe olanak tanıması. Böylece deploy, backup ve sync gibi kelimeleri özgürce kullanabilirim; “kb” öneki sayesinde sistemimdeki PATH içindeki benzer isimli herhangi bir komutla çışmazlar.
İkinci neden ise, hatırlamakta zorlandığım bir takma adı kolayca arayabilmem. Tek başına “kb” yazmak, alt komut listesini fzf’ye (belirsiz arama) yönlendirir; dolayısıyla birini unuttuğumda takma adların aranabilir bir listesine sahip olurum. İşte bu, yukarıda bahsettiğim case ifadesinin tam üstüne yerleştirildiğinde şöyle görünüyor:
kb
() {
if
[ -z
“
$1
“
];
then
local
cmd
cmd=$(
printf
“deploy\nbackup\nsync\nenvreset\n”
| fzf –prompt=
“kb > “
)
[ -n
“
“
] && kb
“
“
# case ifadesi
Bir argüman verilmediğinde, bu liste önce bu fonksiyon tarafından yakalanır ve bana seçebileceğim bir takma ad listesi sunar. Aradığım şeyi seçebilirim; o da beni aşağıdaki case ifadesine yönlendirir. Abartılı mı? Muhtemelen, ama bana şaşırtıcı sayıda kez yardımcı oldu.
Kısayollar çift keskin bir bıçak
Takma adların ardındaki komutları hatırlamaya çalış
Takma adlarım ve fonksiyonlarımı yeterince uzun süre kullandıktan sonra, basitleştirmeyi amaçladıkları gerçek komutların bazılarını hatırlamayı bıraktığımı fark ediyorum. Bu, en çok yeni bir makinede olduğumda ortaya çıkıyor; kas hafızamdan özel takma adlarımı çağırmaya başladığımda, karşısına Bash isteminden bir hata çıkmasıyla karşılaşırım. Bazen, genellikle yalnızca birkaç tuş vuruşunda hatırlayabildiğim uzun komut dizisini yazmanın nasıl yapılacağını bir dakika boyunca düşünmek zorunda kalırım.
Bu arada büyük bir endişe de yok, çünkü tüm takma adlar ve işlevler, herhangi bir anda kolayca başvurabileceğim, düzgünce düzenlenmiş düz metin dosyasında yer alıyor. Yine de her Linux komutunu her zaman ezberlemem beklenemez. Bazen notlara sahip olmak faydalı olur ve ben de .bash_shortcuts dosyayı bunun bir uzantısı gibi görüyorum.
Her şeyi elle yazmak çok yavaş
“kb” yazmak, 30 karakter yazmaktan çok daha hızlı, ama onu sevmemin asıl nedeni bu değil. Çalışmaya hazır olduğum her üç ya da dört komutu aynı rutin üzerinden çalıştırmak zorunda kalmaktan sıkıldım. Karmaşık işlevleri saniyeler içinde ortaya çıkarmak, terminal kullanımının en sıkıcı kısmını otomatikleştirmeye benziyor.
Bu Gelişmeyi Toplulukta Değerlendirin
Haber hakkındaki düşüncelerinizi, donanım deneyimlerinizi ve teknik sorularınızı topluluk üyeleriyle anlık olarak tartışın.
Bu gelişme hakkında düşüncelerinizi, donanım deneyimlerinizi veya sorularınızı Topluluk Forumumuzda paylaşın.
Foruma Katıl & Yanıtla ➔




Söz sizde.
Deneyiminizi, sorularınızı ve katkılarınızı paylaşın. E-posta adresiniz yayımlanmaz.