Nasıl bir çalıştırmak için .sh-komut konsolu Unıx/Mac terminal?
Ben bunu bilir, bunu unutmayın ve tekrar tekrar. Zaman yazmak için.
CEVAP
Yürütülemeyen sh
Bir komut dosyasını çalıştırmak için kullanın:
sh myscript
Yürütülemeyen bash
Bir komut dosyasını çalıştırmak için kullanın:
bash myscript
Çalıştırılabilir bir dosya çalıştırılabilir izni ile herhangi bir dosya () başlatmak için; sadece kendi yolunu belirtin:
/foo/bar
/bin/bar
./bar
Bir komut dosyası çalıştırılabilir hale getirmek için gerekli izni ver:
chmod x bar
./bar
Bir dosya çalıştırılabilir bir dosya ise,çekirdekbu execte için nasıl bulmaktan sorumludur. Olmayan ikili için, bu dosyanın ilk satırı bakarak yapılır. hashbang
: bir içermelidir
#! /usr/bin/env bash
Bu hashbang çalıştırmak için ne çekirdek (bu durumda /usr/bin/env
komut değişken bash
ile koştu) söyler. Sonra, komut programı (ikinci bağımsız değişken olarak) sonraki argüman olarak komut verdiğin tüm değişkenlerle birlikte geçirilir.
Anlamına geliryürütülebilir her bir komut hashbang olmalıdır. Yok, çekirdek söylemediğin şeyi değilçekirdek bunu yorumlayabilmek için kullanmak ne olduğunu bilmiyor bu yüzden. bash
, , *, *21perl
python
, ya da başka bir şey olabilir. (Gerçekte, çekirdek genellikle kullanımı, kullanıcının varsayılan kabuk yorumlama dosyası, bu çok tehlikeli, çünkü olmayabilir doğru sözlü hiç ya da bu olabilir ayrıştırmak mümkün ama ince davranış farklılıkları gibi büyük / küçük harf arasında sh
bash
).
/usr/bin/env
üzerinde bir not
En sık, bu yüzden patlama gibi karma görürsünüz.
#!/bin/bash
Sonuç çekirdek programı /bin/bash
komut yorumlamak için çalışacak. Ne yazık ki, bash
Her zaman varsayılan olarak sevk edilir, ve her zaman /bin
mevcut değildir. Linux makinelerde genellikle iken, bash
çeşitli yerlerde, /usr/xpg/bin/bash
/usr/local/bin/bash
gibi gemileri diğer POSIX makineleri vardır.
Taşınabilir bir bash betiği yazmak için, bu nedenle sabit kodlama bash
programın bulunduğu yere bağlayamayız. POSIX zaten onlarla başa çıkma mekanizması vardır: PATH
. Fikri PATH
dizinleri birinde programlarınızı yükleyin ve sistemi adı ile çalıştırmak istiyorsanız, sizin programı bulmak gerekir.
Ne yazık ki, senolamazsadece bunu yap:
#!bash
Çekirdek (biraz olabilir) PATH
bir arama yapamaz. , env
deniyor ama senin için PATH
bir arama yapmak, bir program var. Neyse ki, neredeyse tüm sistemler env
programı /usr/bin
yüklü. Senaryonu yorumlayacak şekilde env
bash
PATH
bir arama yapar ve çalışan kodlanmış bir yolunu kullanmaya başladık:
#!/usr/bin/env bash
Bu yaklaşımın bir dezavantajı vardır: POSIX Göre, hashbang olabilirbir argüman. Bu durumda, env
programdan bağımsız olarak bash
kullanıyoruz. Bu boşluk bash
argümanları var demektir. Bu plan için #!/bin/bash -exu
gibi bir şey dönüştürmek için bir yolu yok. Bu hashbang sonra set -exu
yerine koymak gerekecek.
Bu yaklaşım aynı zamanda diğer bir avantajı: Bazı sistemlerde olabilir gemi ile /bin/bash
ama kullanıcı olmayabilir gibi, Mayıs bul. buggy veya eski ve yüklü kendi bash
başka bir yerde. Bu genellikle /bin/bash
eskimiş ve kullanıcıların güncel /usr/local/bin/bash
Homebrew gibi bir şey kullanarak yüklediğiniz OS X (Mac). PATH
bir arama yapar env
yaklaşım kullandığınızda, dikkate, kullanıcı tercihi alıp sistemi sevk olanı tercih onun bash kullanın.
Nasıl java kod Unıx kabuk komut dosyas...
Nasıl bir PowerShell komut dosyasını ç...
Nasıl komut satırından JUnit test duru...
Raylar çalıştırmak için nasıl bir test...
nasıl komut satırından argüman olarak ...