Ubuntu için çok yeniyim. İnsanların "kabuk komut dosyası", "bash komut dosyası" dediğini duyuyorum.
Acaba aynılar mı? Yoksa onlar farklı mı?
Ubuntu için çok yeniyim. İnsanların "kabuk komut dosyası", "bash komut dosyası" dediğini duyuyorum.
Acaba aynılar mı? Yoksa onlar farklı mı?
Yanıtlar:
Bash ( bash
) birçok mevcut olanlardan biridir (henüz en yaygın kullanılanıdır) Unix kabukları. Bash, " B ourne A kazanç SH ell" anlamına gelir ve orijinal Bourne kabuğunun ( sh
) değiştirilmesi / geliştirilmesidir .
Kabuk komut dosyası herhangi bir kabukta kod yazarken, Bash komut dosyası özellikle Bash için komut dosyasıdır. Bununla birlikte, pratikte, "kabuk betiği" ve "bash betiği", söz konusu kabuk Bash olmadıkça, genellikle birbirinin yerine kullanılır.
EDIT: Aslında, Ubuntu'daki varsayılan komut dosyası kabuğu, çizgi biçimindeyken, varsayılan etkileşimli kabuk (bir uçbirim alırsanız ne alacağınız) Bash'dir. Bununla birlikte, iki terim hala çoğunlukla birbiriyle değiştirilebilir.
/bin/sh
Sembolik bağlantı /bin/dash
, varsayılan sistem kabuğunu oluşturur, ancak varsayılan komut dosyası kabuğu değildir , yani kesinlikle kullanmanız gereken yazılı bir kural yoktur /bin/sh
. Biri kullandığında /bin/sh
, esas olarak taşınabilirlik nedenlerinden dolayı, komut dosyanızın çoğu /bin/sh
POSIX uyumlu Bourne ailesi kabuğu olan Unix benzeri işletim sistemi platformlarında kullanılmasını beklediğiniz zamandır.
Giriş
Kabuk komut dosyası yazma ve Bash
komut dosyası oluşturma aynı şey değildir, çünkü sh
bir komut dosyasını çalıştırmak için kullanılabilecek diğer kabuklar mevcuttur ; tarafından çalıştırılması amaçlanan bir komut dosyası, komut dosyası Bash
olarak etiketlenmelidir Bash
. Terimler çoğu zaman birbirinin yerine kullanılır Bash
, çünkü , genişletilmiş işlevselliği ile birlikte, sh
birçok komutta kullanıcı komut dosyalarını çalıştırmak için en yaygın kullanılan terimdir . Ancak, aşağıdakiler gibi diğer kabukları vardır Korn (ksh)
, C shell (csh)
ve Z shell (zsh)
, ama biz bir tartışma olarak burada onlara girmeyeceğim sh
ve bash
Ubuntu en alakalı. Buradaki harika bir IBM makalesi , Linux'taki mermilerin evrimi hakkında daha ayrıntılı olarak ele alınıyor ve kabuk mimarisini ve mermilerin nasıl farklılaştığını açıklıyor.
Kabuk Betiği
Sh
Stephen Bourne tarafından geliştirilen orijinal Unix kabuğu; Ancak Debian tabanlı sistemler ve Ubuntu dash
, sh
kabukları olarak görüyor ( sh
aslında birbirine bağlı dash
). Debian ve Ubuntu'da, hızı nedeniyle sh
, kritik sistem prosedürleri ve başlangıçta anahtar komut dosyaları çalıştırmak için daha sık kullanılır; Daha fazla ayrıntı için Ubuntu wiki'sine bakınız . Bash
Bourne Again SHell anlamına gelir ve daha sonra Brian Fox tarafından geliştirildi ve orijinali genişletti sh
. Fox ve diğerlerinin gelişimi Bash
, GNU projesinin önemli bir parçasıydı. Daha fazla bilgi için tarihin bu büyük tartışmasına bakın Bash
.
Hem dikkat etmek önemlidir sh
ve Bash
Ubuntu ve diğer dağılımlar kullanılan, vardır POSIX
onlar komutlar Kabuğu'nda yürütür nasıl standartların bir dizi abone anlamına gelir uyumlu. Bu, işletim sisteminde kullanılan komut dosyalarının sonuçlarının güvenilir bir şekilde tahmin edilebildiğinden ve kabuğun davranışının bu POSIX
geliştiriciler için özellikle önemli olduğundan, bu parametreler içinde tutulmasını sağlamaktır. Standartlar hakkında daha fazla bilgi için resmi belgelere bakın .
Genellikle kabuk komut dosyaları, komut dosyaları .sh
olarak çalıştırılmak üzere tasarlanmış olmaları ve komut dosyasının üstünde olmalarına rağmen , soneklere bash
sahiptir #!/bin/bash
. Komut dosyasının script.sh veya my.script olarak adlandırılmasının önemi yoktur , tercüman aramasının /bin/sh
ya da olması önemli değil /bin/bash
. Kabuk komut dosyaları, komut satırında ya sh
da ile çağrılabilir bash
.
Bununla birlikte, çoğu komutun işe yarayacağından , hangi tercümanın çağrıldığına bağlı olarak sonuçların farklı olabileceğine dikkat etmek önemlidir . Genel olarak, çoğu kullanıcı , genişletilmiş özellik kümesinden yararlanabilmeleri için komut dosyaları için kullanmak isteyecektir ; gerekirse sistem komut dosyaları ile çalıştırılabilir .bash
sh
sh
bash
/bin/bash
/bin/sh
Bash Shell komut dosyası için kaynaklar
Çevrimiçi olarak iyi uygulamaları izleyen ve yararlı komut dosyaları oluşturmanıza olanak sağlayacak tavsiyeler veren faydalı kaynakları bulmak bazen zor olabilir. Sonrasında man bash
, en önemli kaynaklardan bazıları Greg'in wiki'si , Bash hacker'ları ve Steve Parker'ın Shell Scripting konusundaki son kitabıdır Bash
ve O'Reilly tarafından basılmıştır. Bash yeni başlayanlar için iyi bir giriş yapılıyor .
Ubuntu, benzerleri için kullanılabilir birden kabukları vardır bash
, zsh
, ksh
, tcsh
ve csh
.
Yani ne zaman biri kabuk demişse , onlardan biri hakkında konuşuyor Ancak, bu kabukları birbirinden biraz farklıdır. Bu yüzden, biri bash
komut dosyası yazmaktan bahsettiğinde , bir kabuk kullanıyor, ancak birisi kabuk komut dosyası yazmaktan bahsettiğinde, kullanmıyor bash
. Ancak bash
, genellikle Ubuntu için komut dosyalarında kullanıldığı gibi , genellikle öyledir. Üstelik, farklı mermiler birçok açıdan aynıdır, bu yüzden genellikle önemli değildir.
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29 11:53 /bin/sh -> dash*
$ ls -l /bin/dash
-rwxr-xr-x 1 root root 109768 Mar 29 11:53 /bin/dash*
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 955024 Apr 3 08:58 /bin/bash*
Bu, 'sh' ifadesinin 'dash' simgesine bir bağlantı olduğunu ve Ubuntu'daki varsayılan etkileşimli kabuk olan / bin / bash komutunun / bin / sh değerinden 9 kat daha büyük bir çalıştırılabilir olduğunu gösterir.
Gerçekten de, 'man sh' (1590 satır) ile 'man bash' (5459 satır), bash'ın geleneksel 'sh' büyük bir süperset olduğunu ortaya koyuyor.
Daha fazlasını buradan okuyun:
Kabuk betiği , POSIX uyumlu işletim sistemlerinin sistem kabuğu tarafından çalıştırılabilecek bir taşınabilirlik odaklı komut dosyası olarak tanımlanır . Sözdizimi, POSIX standardı tarafından tanımlanan kabuk komut dosyası dili sözdizimi ile aynı veya benzer olacaktır. Bu, Linux / Unix / * BSD vb. Gibi POSIX uyumlu çoğu işletim sistemi için standarttır. POSIX, İşletim Sistemleri arasında uyumluluk için en yaygın temeldir.
Yukarıda belirtilenlerden farklı işletim sistemleri, #! /bin/sh
POSIX komutlarını ve sözdizimini uygulamanın yanı sıra, kendi uzantılarına sahip olan veya muhtemelen daha az kullanışlı özelliklerden çıkarılabilen etkileşimli olmayan kullanım için (ör. Shebang kullanan sistem komut dosyalarını veya komut dosyalarını çalıştırmak için) farklı kabuklar uygular. performans nedenleriyle, ancak POSIX zeminleri, farklı POSIX uyumlu Os'lar için tasarlanmış komut dosyalarının çok yüksek düzeyde taşınabilirliğini sağlar.
Yukarıda belirtilen işletim sistemlerinin çoğu, genellikle tam özellikli bash olan ayrı bir etkileşimli kabuğa sahiptir . Bash, POSIX uyumludur, fakat büyük bir ek komutlar havuzuna sahiptir ve farklı sözdizimlerini destekler. Bash'i --posix komut satırı seçeneğiyle başlatmak veya Bash çalışırken 'set -o posix'i çalıştırmak, Bash'in varsayılan olduğu yerlerde POSIX tarafından belirtilen davranışla eşleşecek davranışı değiştirerek Bash'in POSIX standardına daha yakın olmasına neden olacaktır. farklıdır, bkz: https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html
Kabuklar için çalıştırılabilir dosyalar yerleştirme konusundaki tek biçimli kurallar sayesinde (genellikle '/ bin /' dizininde bulunurlar), kabuk komut dosyaları oluşturmak için tek biçimli kurallara sahip olabiliriz, daha özel olarak, shebang ifadesinde hangi yolu göstereceğimizi açıkça belirledik betiği çalıştırmak için uygun bir kabuk çalıştırılabilir. Unix / Linux / * BSD dosya sistemleri dahili olarak uzantıları desteklemez, bu nedenle dosya uzantıları yalnızca ek bir ipucu olarak veya dizin oluşturma amacıyla kullanılır.
Özellikle Debian / Ubuntu'da , bir çizgi kabuğunun çalıştırılabilir bin/sh
olduğuna işaret eden bir işaret bağlantısıdırbin/dash
. Bu, daha hızlı olan ve daha işlevsel olan bash'ten ~ 1/10 büyüklüğünde olan tahmin edilen sistem kabuğunu çizer. kaynak: https://unix.stackexchange.com/questions/148035/is-dash-or-some-other-shell-faster-than-bash
Debian / Ubuntu interaktif terminali yolu da tekdüze olduğu diğer birçok Unix benzeri işletim sistemleri, bash, olduğu gibi varsayılan olarak: /bin/bash
.
POSIX.1-2017 standardı: http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap02.html
Bir komut veya seçenek POSIX tarafından tanımlanmamışsa
#! /bin/sh
, ilk etapta bir komut dosyasına koymayın.
Komut dosyanızı bash'tan POSIX formuna dönüştürmek için, kabuk komut dosyanızdaki hataları otomatik olarak kontrol etmek veya POSIX ile uyumlu hale getirmek için bash komut dosyasında hangi değişiklikleri yapmanız gerektiğini görmek isteyebilirsiniz: