man/shells_and_env
man · Kabuklar & Ortam

$ bash

Bölüm 1 · Kabuklar & Ortam

GNU Bourne-Again SHell (Yeniden Doğan Kabuk)

Özet

bash [seçenekler] [dosya]

Telif Hakkı

Bash Telif Hakkı (C) 1989-2005 Free Software Foundation, Inc. firmasına aittir.

Açıklama

bash, standart girdiden veya bir dosyadan okunan komutları yürüten, POSIX ve sh uyumlu bir komut dili yorumlayıcısıdır. Bash ayrıca Korn ve C kabuklarından (ksh ve csh) alınan birçok kullanışlı özelliği bünyesinde barındırır.

Bash'in, IEEE POSIX spesifikasyonunun (IEEE Standart 1003.1) Kabuk ve Yardımcı Programlar bölümünün uyumlu bir gerçeklemesi olması amaçlanmıştır.


Seçenekler

set yerleşik komutunun açıklamasında belgelenen tek karakterlik kabuk seçeneklerine ek olarak, bash başlatıldığında aşağıdaki seçenekleri yorumlar:

  • -c string: Eğer -c seçeneği varsa, komutlar string ifadesinden okunur. Eğer string ifadesinden sonra argümanlar varsa, bunlar $0'dan başlayarak konumsal parametrelere atanır.
  • -i: Eğer -i seçeneği varsa, kabuk etkileşimli (interactive) modda çalıştırılır.
  • -l: Bash'in bir oturum açma kabuğu (login shell) olarak başlatılmış gibi davranmasını sağlar.
  • -r: Eğer -r seçeneği varsa, kabuk kısıtlı hale gelir (bkz. Kısıtlı Kabuk bölümü).
  • -s: Eğer -s seçeneği varsa veya seçenek işlemleri tamamlandıktan sonra geriye hiçbir argüman kalmamışsa, komutlar standart girdiden okunur.
  • -D: Önünde $ işareti bulunan tüm çift tırnaklı dizgilerin bir listesi standart çıktıya yazdırılır. Bunlar dil çevirisine tabi olan dizgilerdir.
  • [-+]O [shopt_seçeneği]: shopt_seçeneği, shopt yerleşik komutu tarafından kabul edilen kabuk seçeneklerinden biridir. -O bu seçeneği ayarlar; +O ise onu kaldırır.
  • --: Seçeneklerin sonunu belirtir ve daha sonraki seçenek işlemlerini devre dışı bırakır.

Çok Karakterli Seçenekler

Aşağıdaki seçeneklerin tanınabilmesi için komut satırında tek karakterlik seçeneklerden önce gelmesi gerekir:

  • --debugger: Kabuk başlamadan önce hata ayıklayıcı profilinin yürütülmesini ayarlar. Genişletilmiş hata ayıklama modunu etkinleştirir.
  • --dump-po-strings: -D seçeneğine eşdeğerdir, ancak çıktı GNU gettext po (taşınabilir nesne) dosya biçimindedir.
  • --dump-strings: -D seçeneğine eşdeğerdir.
  • --help: Standart çıktıya bir kullanım mesajı yazdırır ve başarıyla çıkar.
  • --init-file dosya / --rcfile dosya: Kabuk etkileşimli ise, standart kişisel başlatma dosyası olan ~/.bashrc yerine belirtilen dosyadan komutları yürütür.
  • --login: -l seçeneğine eşdeğerdir.
  • --noediting: Kabuk etkileşimli olduğunda komut satırlarını okumak için GNU readline kütüphanesini kullanmaz.
  • --noprofile: Ne sistem genelindeki /etc/profile ne de kişisel başlatma dosyaları olan ~/.bash_profile, ~/.bash_login veya ~/.profile dosyalarını okur.
  • --norc: Kabuk etkileşimli olsa bile kişisel başlatma dosyası olan ~/.bashrc dosyasını okuyup yürütmez.
  • --posix: Varsayılan işleyişin POSIX standardından farklı olduğu durumlarda bash'in davranışını standartla eşleşecek şekilde değiştirir (posix modu).
  • --restricted: Kabuk kısıtlı hale gelir.
  • --verbose: -v seçeneğine eşdeğerdir (komutları okundukça yazdırır).
  • --version: Bu bash örneğinin sürüm bilgilerini gösterir ve başarıyla çıkar.

Argümanlar

Seçenek işlemlerinden sonra geriye argümanlar kalırsa ve ne -c ne de -s seçeneği belirtilmemişse, ilk argümanın kabuk komutlarını içeren bir dosyanın adı olduğu kabul edilir. bash bu şekilde başlatılırsa, $0 değişkeni dosya adına ayarlanır ve konumsal parametreler kalan argümanlara ayarlanır. bash bu dosyadan komutları okur, yürütür ve çıkar.


Başlatma

  • Oturum Açma Kabuğu (login shell): Sıfırıncı argümanının ilk karakteri - olan veya --login seçeneği ile başlatılan bir kabuktur.
  • Etkileşimli Kabuk (interactive shell): Seçenek dışı argümanlar ve -c seçeneği olmadan başlatılan, standart girdisi ile standart hatasının her ikisi de terminallere bağlı olan kabuktur.

Dosya Yürütme Sırası

  1. Etkileşimli Oturum Açma Kabuğu:

    • Önce /etc/profile dosyasındaki komutları yürütür.
    • Ardından sırasıyla ~/.bash_profile, ~/.bash_login ve ~/.profile dosyalarını arar ve mevcut/okunabilir olan ilk dosyayı yürütür.
    • Çıkışta (logout), mevcutsa ~/.bash_logout dosyasını yürütür.
  2. Oturum Açma Olmayan Etkileşimli Kabuk:

    • Mevcutsa ~/.bashrc dosyasındaki komutları yürütür.
  3. Etkileşimsiz Kabuk (örn. Kabuk Betiği):

    • Ortamdaki BASH_ENV değişkenini arar, eğer mevcutsa bu dosyadaki komutları yürütür.
    if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

[!NOTE] bash eğer sh adıyla çağrılırsa, POSIX standartlarına uyum sağlamak amacıyla eski sh başlatma davranışlarını taklit eder: etkileşimli modda yalnızca ENV değişkenini okur, ~/.bashrc dosyasını es geçer.


Tanımlamalar

  • boşluk (blank): Bir boşluk (space) veya sekme (tab) karakteri.
  • sözcük (word): Kabuk tarafından tek bir birim olarak kabul edilen karakter dizisi.
  • ad (name): Yalnızca alfanümerik karakterlerden ve alt çizgilerden oluşan ve bir harf veya alt çizgiyle başlayan sözcük (tanımlayıcı).
  • meta karakter (metacharacter): Tırnak içine alınmadığında sözcükleri ayıran karakterler: | & ; ( ) < > space tab
  • denetim işleci (control operator): || & && ; ;; ( ) | <yeni satır>

Ayrılmış Sözcükler

Ayrılmış sözcükler (reserved words), kabuk için özel anlamı olan kelimelerdir: ! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]


Kabuk Dil Bilgisi

Basit Komutlar

Basit bir komut (simple command), isteğe bağlı bir dizi değişken atamasını takip eden, boşluklarla ayrılmış sözcükler ve yönlendirmelerden oluşan ve bir denetim işleciyle sonlandırılan dizidir. Çıkış durumu, yürütülen komutun çıkış durumudur.

Boru Hatları

Bir boru hattı (pipeline), | veya |& denetim işleçlerinden biriyle ayrılmış komutlar dizisidir: [time [-p]] [!] komut [ | veya |& komut2 ... ]

  • |& kullanılması, standart hatanın da bir boru aracılığıyla sonraki komutun standart girdisine bağlanmasını sağlar (2>&1 | yönlendirmesinin kısaltmasıdır).
  • ! operatörü, boru hattının çıkış durumunun mantıksal olumsuzlamasını alır.

Komut Dizileri

Bir komut dizisi (lists), ;, &, && veya || ile ayrılmış boru hatlarıdır.

  • && (VE): komut1 && komut2 ifadesinde komut2 yalnızca komut1 başarılı olursa (0 çıkarsa) yürütülür.
  • || (VEYA): komut1 || komut2 ifadesinde komut2 yalnızca komut1 başarısız olursa (sıfır dışı çıkarsa) yürütülür.

Bileşik Komutlar

  • (liste): liste komutları bir alt kabuk (subshell) ortamında yürütülür.
  • { liste; }: liste komutları geçerli kabuk ortamında yürütülür.
  • ((ifade)): Aritmetik ifadeyi değerlendirir. Değer sıfır dışı ise durum 0, aksi halde 1'dir.
  • [[ ifade ]]: Koşullu ifadeyi değerlendirir. Sözcük bölme ve dosya adı genişletmesi gerçekleştirilmez.

Genişletme (Expansion)

Genişletme işlemleri komut satırı kelimelere bölündükten sonra sırasıyla şu sırada uygulanır:

  1. Küme Genişletme (Brace Expansion): a{d,c,b}e -> ade ace abe.
  2. Tilde Genişletme (Tilde Expansion): ~ -> HOME dizini, ~+ -> PWD.
  3. Parametre ve Değişken Genişletme: ${parametre:-sözcük} (varsayılan değer), ${#parametre} (uzunluk), ${parametre#desen} (ön eki kaldır).
  4. Aritmetik Genişletme: $((ifade)) aritmetik değerlendirme yapar.
  5. Komut Değiştirme: $(komut) veya \komut`` standart çıktıyı komutun yerine yerleştirir.
  6. Süreç Değiştirme (Process Substitution): <(komut) veya >(komut).
  7. Kelime Bölme (Word Splitting): IFS karakterlerine göre kelimelere bölme gerçekleştirilir.
  8. Dosya Yolu Genişletme: *, ? ve [ karakterlerini kullanarak dosya arama.

Kısıtlı Kabuk (Restricted Shell)

Bash rbash adıyla başlatılırsa veya -r / --restricted seçeneğiyle çağrılırsa kısıtlı hale gelir.

[!WARNING] Kısıtlı kabukta aşağıdaki işlemlere izin verilmez:

  1. cd komutuyla dizin değiştirmek.
  2. SHELL, PATH, ENV veya BASH_ENV değişkenlerini değiştirmek veya silmek (unset).
  3. / karakteri içeren komut adlarını yürütmek (doğrudan dosya yoluyla komut çalıştırmak).
  4. . (source) yerleşik komutuna argüman olarak eğik çizgi içeren bir dosya adı belirtmek.
  5. Yönlendirme işleçleri (>, >|, <>, >&, &> ve >>) kullanarak çıktıyı yönlendirmek.
  6. exec kullanarak kabuk sürecini başka bir komutla değiştirmek.
  7. set +r veya set +o restricted kullanarak kısıtlı modu devre dışı bırakmak.

Kabuk Yerleşik Komutları (Shell Builtin Commands)

Sık kullanılan bazı kabuk yerleşik komutları şunlardır:

  • alias [ad[=değer] ...]: Kabukta takma ad (alias) tanımlar.
  • bg [iş_belirteci ...]: Askıya alınmış işleri arka planda yürütmeye devam ettirir.
  • cd [-L|[-P [-e]]] [dizin]: Geçerli çalışma dizinini değiştirir.
  • declare [-aAfFgilrtux] [-p] [ad[=değer] ...]: Değişkenleri ve özniteliklerini tanımlar.
  • echo [-neE] [argüman ...]: Argümanları çıktıya yazar.
  • exec [-cl] [-a ad] [komut]: Kabuk sürecini doğrudan belirtilen komutla değiştirir.
  • fg [iş_belirteci]: Arka plandaki bir işi ön plana getirir.
  • jobs [-lnprs] [iş_belirteci ...]: Etkin işleri listeler.
  • read [-ers] [-a dizi] [-p istem] [ad ...]: Standart girdiden bir satır okur.
  • set [--abefhkmnptuvxBCEHPT]: Kabuk seçeneklerini ve konumsal parametreleri ayarlar.
  • test ifade / [ ifade ]: Koşullu ifade değerlendirmesi gerçekleştirir.
  • ulimit [-SHacdefilmnpqrstuvx [limit]]: Kaynak sınırlarını yönetir.
  • umask [-p] [-S] [mod]: Dosya oluşturma maskesini ayarlar.
  • unalias [-a] [ad ...]: Takma adları kaldırır.
  • unset [-fv] [ad ...]: Değişkenleri veya fonksiyonları siler.
  • wait [n ...]: Belirtilen arka plan süreçlerinin veya işlerin tamamlanmasını bekler.

Örnekler

Aşağıdaki örnekler kabukta (shell) çalıştırılabilecek şekilde gösterilmiştir:

  1. Basit bir Bash betiğini çalıştırma:

    bash betik.sh
  2. Komut satırından doğrudan tek bir komut çalıştırma:

    bash -c "echo 'Merhaba Dunya'"
  3. Özel bir başlatma dosyası (rcfile) belirterek etkileşimli kabuk açma:

    bash --rcfile ~/.ozel_bashrc -i
  4. Hata ayıklama (debug) moduyla bir betiği adım adım izleme:

    bash -x betik.sh
  5. POSIX uyumluluk modunda çalıştırma:

    bash --posix

Ayrıca Bakınız

sh(1), csh(1), zsh(1), dash(1), echo(1), alias(1), clear(1), env(1)

Dosyalar

  • /bin/bash: bash yürütülebilir dosyası
  • /etc/profile: Oturum açma kabukları için yürütülen sistem genelindeki başlatma dosyası
  • ~/.bash_profile: Oturum açma kabukları için yürütülen kişisel başlatma dosyası
  • ~/.bashrc: Etkileşimli kabuk başına bireysel başlangıç dosyası
  • ~/.bash_logout: Oturum açma kabuğundan çıkıldığında yürütülen bireysel oturum kapatma dosyası
  • ~/.inputrc: Bireysel readline başlatma dosyası