Bash Alias Tanımlamalarım

Bash Alias Tanımlamalarım

Herkese merhaba.
Bu içerikte terminali sıklıkla kullananlar için gerçekten çok işe yarayacağını düşündüğüm bilgiler paylaşacağım. Ancak baştan söylemeliyim ki bu içerik direkt olarak geliştiriciler için hazırlanmış bir içerik olacak zira terminal komutlarını zaten bildiğinizi varsayıyor olacağım. Yani içeriği okuyup sonra bana “Hele hele, biz bunları nasıl anlayalım!” şeklinde yorumlarda bulunmayın lütfen.
Her neyse, hazırsanız başlayalım…

Öncelikle tüm komutların bash/zsh gibi Linux temelli işletim sistemleri için geçerli olduğunu söylemek isterim. Bu nedenle Windows kullanıcılarının bilgisayarında git kuruluysa (ki geliştirici olduğunuzu varsaydığım için mutlaka kurulu olmalı) git içerisindeki bash’i kullanmaya başlamalarını önerebilirim. Her ne kadar bu komutların birebir karşılıkları PowerShell için olsa da benim gibi hem Windows hem MacOS kullananlar için her tanımlamayı her seferinde iki yerde de yapmak çok uğraştırıcı olacağı için iki yerde de bash kullanmaları gayet akıl kârı olacaktır.

Şimdi komutlara geçmeden önce Windows kullanıcılarının nasıl bash’e geçiş yapacağını anlatmak isterim. Ancak “Ben Windows kullanmıyorum kardeşim!” diyenler buraya tıklayarak ana içeriğe erişebilirler. Öncelikle aşağıdaki registiry komutlarını <herhangi bir ad>.reg olarak bilgisayarınızın herhangi bir klasörü içerisine kaydedin.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\bash]
@="BASH (Administrator)"
"Icon"="C:\\Program Files\\Git\\git-bash.exe"

[HKEY_CLASSES_ROOT\Directory\shell\bash\command]
@="\"C:\\Program Files\\Git\\bin\\bash.exe\" \"--cd=%1\""

[HKEY_CLASSES_ROOT\Directory\Background\shell\bash]
@="BASH (Administrator)"
"Icon"="C:\\Program Files\\Git\\git-bash.exe"

[HKEY_CLASSES_ROOT\Directory\Background\shell\bash\command]
@="\"C:\\Program Files\\Git\\bin\\bash.exe\" \"--cd=%v.\""

Eğer git kurulumunuz standart kurulum pathi içerisinde ise herhangi bir şey yapmanıza gerek yok ancak kurulum esnasında farklı bir path seçtiyseniz yukarıda yer alan pathleri kendi kurulum pathinize göre düzenlemeniz gerekecektir. Düzenlemeniz gereken bölümde run edilecek dosya git klasörü içerisindeki bin klasörünün içerisinde bulunan bash.exe dosyası. Context menüsünde görüntülenecek olan icon için ise direkt olarak git klasörü içerisinde bulunan git-bash.exe dosyasını göstermeniz gerekli zira aksi halde default icon görünecektir ve bu benim hiç hoşuma gitmezdi.

Bu aşamayı da tamamladıysanız bu dosyaya çift tıklayın ve gelen uyarıya EVET deyin. Bu sayede klasörlere sağ tıkladığınızda çıkan context menüsünde BASH (Administrator) adında bir menu ögesi belirecek ve siz bu ögeye tıkladığınızda sağ tık yaptığınız klasörün içerisinde yeni bir bash terminal penceresi açılacak. Bu da eminim ki işleri çok kolaylaştıracaktır.

Bu aşamadan sonra bash’i her açtığınızda yönetici olarak çalışmasını istiyorsanız bash.exe dosyasının özelliklerinden Yönetici olarak çalıştır seçeneğini aktif etmeniz gerekir. Elbette bu durumda bashi kullanacağınız ideleri/editörleri de bu şekilde yönetici olarak çalıştırmalısınız çünkü aksi halde yetkileri olmadığı için integrated terminal olarak bash’i açamayacaklardır.

Yönetici iznini alıp alamadığınızı kontrol etmek için aşağıdaki komutu terminal içerisine yapıştırıp kontrolü sağlayabilirsiniz. Eğer yönetici izniniz varsa Administrator, yoksa kendi kullanıcı adınız print edilecektir.

if [[ $(sfc 2>&1 | tr -d '\0') =~ SCANNOW ]]; then echo Administrator; else echo $USERNAME; fi

Son olarak tamamı ile bir öneri, eğer siz de bash açıldığında çıkan saçma MINGW yazısından rahatsızsanız aşağıdaki path içerisinde bulunan dosyayı açıp hemen altındaki satırların başına comment (#) işareti koyarsanız bu saçma yazıdan kurtulmuş olursunuz.

...\Git\etc\profile.d\git-prompt.sh

# PS1="$PS1"'\[\033[35m\]'       # change to purple
# PS1="$PS1"'$MSYSTEM '          # show MSYSTEM

Linux / MacOS Kullanıcıları buradan devam edebilir...

Evet, Windows kullanıcıları için ana problemi yok ettiğimize göre artık asıl konumuza dönebiliriz. Aşağıda benim kendime göre tanımladığım kısayolları bulabilirsiniz. Bu kısayollar terminaliniz açılırken her defasında execute edilmesi gerektiği için profile dosyanız içerisine en alta yapıştırmanız gerekmekte. Bahsettiğim dosyayı MacOS ve bash kullananlar için ~/.bash_profile pathinde, MacOS ve zsh kullananlar için ~/.zshrc pathinde ve son olarak Windows kullananlar için {UserName}/.bashrc pathinde bulabilirsiniz. Linux dağıtımları kullananlar lütfen araştırsınlar çünkü ne yazık ki o konuda bilgim yok.

clear;

# Defined Paths
homeDir=~;
desktopPath=~/Desktop;
downloadsPath=~/Downloads;
profileFilePath=~/.zshrc;
profileHistoryFilePath=~/.zsh_history;
# Defined Paths END

# Aliases
alias e="exit";

alias c="clear";
alias cls="clear";
alias clearHistory="rm $profileHistoryFilePath;clear";

alias hide="setfile -a V";
alias show="setfile -a v";

alias editProfile="code $profileFilePath";
alias refreshProfile=". $profileFilePath";

alias ca="cd $homeDir";
alias desktop="cd $desktopPath";
alias downloads="cd $downloadsPath";
# Aliases END

# Functions
function ..(){
    for i in {1..$1}
    do
        cd ..;
    done
}

function oc(){
    if [ -z "$1" ]
    then
        code .;
    else
        code $1;
    fi
}
# Functions END

Şimdi yukarıdaki komutlara sıra sıra baktığımızda, en başta clear terimini çağırıyorum çünkü ben başta gelen saçma yazıları görmek istemiyorum. Ancak sonda değil de başta çağırmamın sebebi profile dosyası execute edilirken bir hata ortaya çıkarsa onu terminal ekranında görebilmek. Diğer komutlara ise sırasıyla bakacak olursak öncelikle komutlar içerisinde kullandığım pathleri değişken olarak tanımlıyorum. Böylece kullandığım işletim sistemine göre sadece bu bölümleri değiştirmem yeterli olacak, başka bir şey yapmama gerek kalmayacak.

Sonrasında aliasları tanımladım, bu ailasların çoğu zaten bakarak anlaşılabilir düzeyde olan komutlar. Ancak özellikle belirtmek istediğim bazı tanımlamalar var.

  1. clearHistory: Bu tanımlama kullandığımız shell’in geçmişini rm komutu ile siliyor. Böylece terminalde scrollu yukarı kaydırdığınızda çıkan eski komutlar yok oluyor. Tabii bunu etkili olması için terminali yeniden başlatmanız gerekiyor ancak bunu komut ile yapacak bir çözüm bulamadım ne yazık ki.

  2. hide / show: Bu iki komut, sonrasında gönderdiğimiz dosya/klasör adına göre o dosyayı/klasörü gizliyor ya da görünür kılıyor.

  3. editProfile: Bu komut şu anda düzenlediğimiz dosyayı her seferinde gidip bulup açmak yerine direkt olarak VS Code ile açıyor ve hızlıca düzenlemenizi sağlıyor.

  4. refreshProfile: Bu komut ise herhangi bir edit yaptıktan sonra profile dosyasını tekrar execute etmek için terminali yeniden başlatmanıza gerek kalmadan direkt olarak dosyayı tekrardan execute ediyor.

Alias tanımlamalarından sonra ise bazı functionlar gelmekte. Bu functionlardan ilki olan ..() functionu cd (change directory) komutunu kullanmadan üst klasörlere gidebilmenizi sağlıyor. Bir üste gitmek istediğinizde .. belirli sayıda gitmek istediğinizde ise .. n şeklinde (arada boşluk var) kullanabilirsiniz. Böylece girdiğiniz n değeri kadar üst klasöre çıkabilirsiniz.

Son olarak ise oc() functionu bulunmakta. Açılımı Open Code olan bu function, terminalde herhangi bir klasör içerisinde iken sadece oc yazdığınızda bulunduğunuz klasörü VS Code içinde açıyor, parametre olarak dosya/klasör gönderdiğinizde ise o dosyayı/klasörü VS Code içinde açıyor.

Tüm bunların dışında bir de benim ihtiyaç duymadığım için kullanmadığım (zira Angular komutları gayet kısa ve kullanışlı) ancak uzun uzun komutlar içeren yazılım dili/frameworklerle ilgilenenler için bir yapıdan daha bahsetmek istiyorum. Hemen aşağıda bahsedeceğim bu switch/case yapısını bulabilirsiniz.

function methodName(){
    for arg in "$@"
    do
        case $arg in
            param1)
                #Do something...
            ;;
            param2)
                #Do something...
            ;;
            help)
                echo 'Explain something...'
            ;;
            *)
                echo $arg 'not found!'
            ;;
        esac
    done
}

Yukarıda da gördüğünüz gibi bir method tanımlayıp bu methoda göndereceğiniz farklı parametrelere göre farklı işlemler yapabilirsiniz. Örneğin methodName param1 dediğinizde param1’in bulunduğu case içerisine girecek ve siz de buna göre işlemler yapabileceksiniz. Uzun uzun komutları olan işlemlerinizi bu şekilde kısaltmanız eminim ki çok işinize yarayacaktır. Dilerseniz param1 yerine –param1 yazarak tıpkı shell komutları gibi bir yapı da kurmanız mümkün tabii ki.

Son olarak daha yeni yeni tanımlamalar yaptığım için ileride bu tanımlamalar mutlaka değişecektir, o nedenle buradan dosya içeriğini yayınladığım gist linkine giderek güncel tanımlamalarımın tamamını görebilirsiniz.

Umarım faydalı bir içerik olmuştur. Bir sonraki içerikte, belirsiz bir zaman sonra görüşmek üzere...