Bash bir yazılımcı için isviçre çakısı gibidir, ve bunu efektif kullanabilmek oldukça önemlidir. Bash’i efektif kullanabilmek için birbirinden güzel 15 bash tekniği.


Sihirli Parantezler

1- Eğer bir dosyanın uzantısını değiştirmek istiyorsanız uzun uzun yazmak yerine, iki süslü parantez koyarak bu sorunu hemen ortadan kaldırabilirsiniz.

>> mv ./file.{html,md}

2- Veya bir sayı kümesi oluşturup bunu iterate edebilirsiniz.

>> echo {1..3}

# {START..END..INCREMENT} pattern
for i in {0..7..2}
  do;
    echo "for loop n: $i";
done

Klasör İşlemleri

3- Genelde oluşturduğumuz dosyaların içine girmemiz gerekir. Ve bunu 2 komut girerek yapmaktansa kendimiz bir fonksiyon yazarak tek komuta indirebiliriz.

# bunu fonksiyonlarınızın olduğu dosyanın içine yapıştırın
mcd(){
    mkdir -p "${1:?Need to specify an argument}" && cd "$1"
}

>> mcd test

4- Özellikle Java, C# gibi dillerle yazılan projelerde çok derin bir klasörleme olabiliyor ve bir süre sonra root dizine gitmek epeyce zorlaşabilir. Bunun için bir alias tanımlayarak hızlı bir şekilde projelerinizin root dizinine gidebilirsiniz.

# bunu alias'larınızı tanımladığınız dosyanın içine yerleştirin
# not: sadece git ile çalışılan projelerde çalışır
alias cdr='cd $(git rev-parse --show-toplevel)'

5- Bir önceki bulunduğunuz konumamı gitmek istiyorsunuz? O halde bir - ile bu sorunu çözebilirsiniz.

>> cd -

Semboller

6- Her yerde olduğu gibi değişkenler bash’dede önemlidir. $( ) sembolleri arasına yazdığınız karakterler bash’de değişken olarak yorumlanır.

>> touch foo-$(date -I)

7- Bir işlem yapıcaksınız ve bu işlemin çok uzun süreceğini mi düşünüyorsunuz? O halde bu işlemi arka planda çalıştırmak oldukça mantıklı olur. Komutunuzun sonuna & işareti ekleyerek işlemin arka planda çalışmasını sağlayabilir ve işinize kaldığınız yerden devam edebilirsiniz.

>> curl --upload-file ./hello.txt https://transfer.sh/hello.txt &

-- OUTPUT --
[1] 1564
[1] + 1564 done curl --upload-file ./default.md https://transfer.sh/default.md

# eğer işlem devam ederken, işlemi öldürmek isterseniz; kill [process id]
>> kill 1564

8- Örneğin üstteki örneğimizde ki gibi işlemi arka plana aldınız ve process id’sini unuttunuz. $! en son yürüttüğünüz arka plan işleminin ID’sini size vericektir.

>> sleep 60 &

[1] 1814

>> kill $!

[1]  + 1814 terminated  sleep 60

9- Son yazdığınız komutu tekrar mı yazmanız gerekiyor? O halde !! yazarak son yazılan komutu tekrar alabilirsiniz.

NOT: Aslında Terminal emülatörlerinde ileri geri tuşları ile bu daha kolay bir şekilde yapılabiliyor fakat Bash Script yazıyorsanız böyle bir imkanınız olmaz ve son komutu bu şekilde almak zorunda kalırsınız.

>> echo Hello World
Hello World
>> !!

-- RESULT --
>> echo Hello World 

10- Peki komutu değilde son parametrelerini almak istiyorsak? Bu durumda ise !$ yardımımıza yetişiyor.

>> echo "Hello World"
Hello World

>> test !$

-- RESULT --
>> test "Hello World"

# farklı kullanımlar; 
#   * `!:2-3`  -> 2. ve 3. parametreyi alır
#   * `!:2`    -> sadece 2.parametreyi alır

Çeşitli

11- Eğer Linux terminalinde hızlı bir şekilde takvim görmek istiyorsanız, cal sizin için biçilmiş bir altın kaftandır.

# varsayılan olarak mevcut ayın takvimini gösterir
# Kullanımı: cal [[month] year]
>> cal

--- OUTPUT ---
     June 2021
Su Mo Tu We Th Fr Sa
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

>> cal 01 2010

--- OUTPUT ---
    January 2010
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

## daha fazla örnek; cal -4, cal 2018

12- watch ile belirtilen komutu otomatik olarak tekrar tekrar çalıştırabilir ve sonuçları standart çıktıda görüntüleyebilirsiniz, böylece zaman içindeki değişimini de izleyebilirsiniz. watch Varsayılan olarak, komutu her iki saniyede bir çalıştırılır, ancak bu -n secs argümanı ile bu süreyi ayarlayabilirsiniz.

# mesela tüm nodejs process'lerini görüntüleyelim
>> watch "ps -e | grep node"

-- OUTPUT --
Every 2s: ps -e | grep node                             Sat Jun 12 21:00:00 2021

 PID TTY          TIME CMD
1167 pts/1    00:00:00 node
1189 pts/1    00:03:30 node
1224 pts/2    00:00:00 node
1235 pts/2    00:00:40 node

13- Bir çok kişi çok önemsemesede man komutu da aslında oldukça önemlidir. man komutu size terminal’de çalıştrabileceğiniz herhangi bir komutun kullanım klavuzunu gösterir. (İsim, Özet, Açıklama, Seçenekler, Çıkış Durumu, Dönüş Değerleri, Hatalar, Dosyalar, Versiyonlar, Örnekler, Yazarlar ve daha fazlası)

>> man xargs

Bash Script

14- Diyelim ki bir projemizin kurulumu için bash script yazıyoruz ve insanlar yazdığımız bu script’i wget ile internetten indiriyorlar. Fakat burada düşünmemiz gereken bazı durumlar var, örneğin kullanıcı script’i internetten çekerken internet bağlantısı gidebilir veya kötü bir bağlantıya sahip olabilir, bunlara bağlı olarak script’in sadece bir kısmı gelebilir. Daha sonra kullanıcı bunu çalıştırırsa (veya direk inline çalıştıracak şekilde yazdıysa komutu) sadece var olan kısmı çalışır ve aslında kurulumu yapamamış olur, işleri biraz daha karmaşıklaştırmış olur.

Bunun önüne geçmek bir main fonksiyon açıp, normalde fonksiyon dışına yazdığımız kodları bu fonksiyonun içerisine yazıyoruz. En son satırda da bu fonksiyonu çağırıyoruz. Bu sayede kullanıcı eğer script’in tamamını indirmediyse main fonksiyonu ve ona bağlı olarak çalışan fonksiyonlar da çalışmaz.

// Other Functions

main() {
  // Your Codes
}

main "$@"

Klavye Kısayolları

15- İşinize yarıyacak bazı popüler terminal kısayolları.

  1. Ctrl + R: Komut geçmişinizde arama yapar
  2. Ctrl + E: İmleci en başa götürür
  3. Ctrl + A: İmleci en sona götürür
  4. Ctrl + U: İmlecin solundaki kısmı siler
  5. Ctrl + K: İmlecin sağındaki kısmı siler
  6. Ctrl + P: Komut geçmişinizde geri gider
  7. Ctrl + L: Terminal ekranınızı temizler
  8. Ctrl + D: Eğer aktif bir process’in içerisinde iseniz onu kapatır, değilseniz ve terminal’de herhangi bir şey yazılıysa imleçten sonraki karakteri siler, eğer hiçbişe yazılı değilse kullanıcıdan veya bulunduğun terminal’den çıkış yapar

Son

Umarım bu yazıyı okuyarak harcadığınız zamanı, buradan öğrendikleriniz ile telafi edebilirsiniz. Sonraki yazılarda görüşmek dileğiyle.