SORU
9 NİSAN 2009, PERŞEMBE


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
9 NİSAN 2009, PERŞEMBE


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, , *, *21perlpython, 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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Distractify

    Distractify

    1 Aralık 2011
  • JTechTalk

    JTechTalk

    11 Temmuz 2010
  • williamfitzsimmons

    williamfitzs

    14 Mart 2008