Bir Kabuk Komut Dosyasından Komutlar Nasıl Yürütülür

How Execute Commands From Within Shell Script



Bash'de, bir kabuk betiğinden komutları yürütmek ilk başta biraz korkutucu olabilir ve bir inanç sıçraması gerektirebilir. Sonuçta, bir bash betiği içinde yürütülen komutlar etkileşimli değildir. Burada, komutlarla ilgili aşağıdaki soruları yanıtlayarak bir kabuk komut dosyası içinden komutları yürütmek için temel oluşturacağız: Nereden geliyorlar? Onlar neler? Bunları bir komut dosyasında nasıl kullanırız?

Komutlar nereden geliyor?

Bash'deki komutlar aşağıdaki kategorilerden herhangi birinden gelir:







Bash'in kendisi (yerleşiklere bakın)

Bash, dizileri bildirmek, bir dosyadan satırları okumak gibi yerleşik özelliklerine ve bash'a yerleşik diğer özelliklere erişime izin vermek için kendi komut setiyle birlikte gelir. Bu kategorideki komutları, bash yerleşik komutlarını veya kısaca yerleşikleri çağırırız.



Ortamınızdaki yürütülebilir dosyalar (harici komutlara bakın)

Varsayılan olarak, bash varsayılan olarak belirli değişkenleri devralır. Bu, bash'ta harici komutlar olarak başvurulan yürütülebilir dosyalar için konumlar da dahil olmak üzere PATH değişkeni durumunda gözlemlenir. Yani, eğer kıvrılmak komut yolunuzdaysa, etkileşimli modda olduğu gibi bir bash betiği içinden yürütülebilir. Bu kategorideki komutları, harici komutları veya kısaca komutları diyoruz.



Kullanıcı tanımlı fonksiyon (fonksiyonlara bakın)

Bash, harici komutları ve yerleşikleri çalıştırmadan önce bir işlevin tanımlanıp tanımlanmadığını kontrol eder. Eğer öyleyse, işlev bir komut olarak yürütülür. Olmazsa, komutlar için öncelik sırasına göre ilerler. Bir betiğin dışında tanımlanan işlevi yürütmek için -x özniteliği ile bildirilmelidirler; aksi takdirde, kullanılarak dahil edilebilirler. Emretmek. Bu kategorideki komutlara kullanıcı tanımlı işlevler veya kısaca işlevler diyoruz.





komutlar nelerdir

Komut, kabuk ortamında bir programın tek bir giriş noktası olarak ele alınacak herhangi bir kelimedir. Komutun yürütülmesi durumunda, komutun kendisi ve isteğe bağlı bağımsız değişkenler, ${0}, ${1}, ${2}, ... konum parametreleri olarak iletilir. Sıfırıncı konum parametresi (${0}) komutun kendisidir ve bağlamda değişmez. Diğer bir deyişle, ${1}, ${2}, … işlevlerindeki bağlama bağlı olarak değişebilen konumsal parametrelerin aksine, ${0} işlev çağrıları arasında değişmez.

Komutların kapsamı, bildirimin konumuna ve genel, bash için yerleşik veya bash programınıza yerel olarak atanan niteliklere bağlı olarak belirlenir.



İşte bilinmesi gereken komut türlerinin bir listesi.

Yerleşik komutlar

Bunlar, '.' ':' '[' ']' gibi karakterler ve beyan in bash gibi ayrılmış sözcükler de dahil olmak üzere, bash evreninin birinci sınıf vatandaşlarıdır. Bash yerleşik komutlar listesinde yer alan bu komutların, bash betiğinizde kullanılabilecek duruma gelmesine güvenirsiniz.

Bash yorumlayıcınızın tanımına ve sürüm numarasına bağlı olarak bazı komutlar kullanılamayabilir.

Harici komutlar

Harici komutlar, curl gibi bir bash betiğinin dışından erişilebilen yürütülebilir dosyalardır. Fonksiyonların aksine, harici komutlar değişken olarak saklanmaz.

Bir komut türünün önceliği ne kadar düşükse, komut o kadar geç yorumlanabilir. Harici komutlar, bash'ta en düşük öncelik sırasına sahiptir. Bu, harici bir komut çalıştırmadan önce, yorumlayıcı bash, işlevleri, ardından yerleşikleri arar ve son olarak harici olarak bir komutun olup olmadığını görmeye çalışır. Değilse, aşağıdaki hatayı görmelisiniz.

bash: bilinmeyen komut:emretmekbulunamadı

Bir bash betiğinde, curl bash örneklerinde daha önce gördüğümüz gibi aynı adı paylaşıyorsanız, işlevler harici komut davranışını geçersiz kılabilir. Bir işlevi kullanan özel bir harici komut örneği aşağıdadır.

kıvrılmak() {
emretmek ${FUNCNAME}...
}

Bu, işlevlerin harici komutlardan ve hatta bash yerleşiklerinden daha yüksek önceliğe sahip olması nedeniyle işe yarar. Sınırlama, bir işlev adında izin verilen karakterlerdir.

Yukarıdaki örneğin, aşağıdaki gibi bir takma ad kullanılarak gerçekleştirilebileceğini unutmayın.

takma ad kıvrılmak= '
{
kıvırmak...
}
'

Takma adlar söz konusu olduğunda, komut türü yürütmedeki bağlama bağlı olarak farklılık gösterebilirken, işlev yöntemini kullanan özel harici komutlar söz konusu olduğunda giriş noktası her zaman bir işlevdir.

Fonksiyonlar

Fonksiyonlar bash'ta kuraldır. Yerleşiklere ve harici komutlara bakmadan önce bash, bir işlevin aday işlev adıyla tanımlanıp tanımlanmadığını, bir satırda ilk sözcüğün mü yoksa ; komut satırının sonunu belirten karakter. Tek istisna, ${FUNCNAME} gibi tamamı büyük harflerle yazılmış bash değişkenleridir.

takma ad() { FUNCNAME=asdf;dışarı attı $ {@ ,,};}
takma ad kıvrılmak='TEST CURL ALIAS' #?

Basit komutlar

Bash kılavuz sayfalarında basit komutlar, isteğe bağlı argümanlar tarafından takip edilen bir kelime olarak tanımlanır. Bağlamda, basit bir komut yerleşik, harici komut veya işlev olabilir.

Bir bash betiği içinden komutlar nasıl yürütülür

Artık ne tür komutların mevcut olduğunu bildiğimize göre, bunları komut dosyalarınızda nasıl kullanacağınızı genişletebiliriz. İlk olarak, komut önceliğinin bash'ta nasıl çalıştığını bilmemiz gerekecek.

Bir bash betiğinde önceliği kontrol etmenin bazı yolları.

Bash karar versin

komut_adı

Çoğunlukla, özellikle başlangıçta, hangi komutun kullanılacağına bash'in karar vermesine izin verdik. Ancak, niyetinizin bash tarafından doğru şekilde yorumlanmayabileceği durumlar vardır. İşlev adları ve harici komutlar veya yerleşikler çakıştığında durum böyledir.

Harici bir komut yürütün

emretmekkomut_adı

Etkileşimli modda kullanılabilen harici bir komut_adı komutu olduğunu ve bunu bir bash betiğinde kullanmak istediğinizi varsayalım. Bash'a komut yerleşikini kullanarak komut_adı'nın harici bir komut olduğunu açıkça söyleyebiliriz.

Harici komut örnekleri

Aşağıdakilerin kurulu olduğu varsayılarak harici komut örnekleri:

dosya
git
balık
Örnek: Dosya türünü ve bilgilerini alın
{ # dosya türünü ve bilgilerini al
dosya ${dosya} # (1,2)
}
# (1) komut, dosya
# (2) infile={Dosya yolu}
Örnek: Git'te sahne değiştirildi ve yeni dosyalar
{ # git'teki aşama dosyaları
git ekle.# (1)
}
# (1) komut, git
Örnek: Figlet kullanarak ascii sanatı oluşturun
{ # ascii sanatı yarat
balık${mesaj} # (1,2)
}
# (1) komut, figlet
# (2) mesaj={Ascii art olarak görüntülenecek mesaj}

Yerleşik bir komut yürütün

yerleşikkomut_adı

Komut_adı'nın, bash'ta yerleşik olarak tanımlanan komutlardan biri olduğunu varsayalım. Bash'a command_name yerleşik olarak çalıştırmak istediğimizi bildirmek için yerleşik yerleşik kullanıyoruz.

Yerleşik komut örnekleri
Örnek: Kaç yerleşik?
yerleşik{,}{,,}{,,,} # kaç tane yerleşik var?
Örnek: Hayalet beyan
{
bildirmek() { dışarı attıayy!;}
bildirmek-xfbildirmek #?
}

Çözüm

Bir bash kabuk betiği içinden bir komutu yürütmek oldukça kolaydır. Üç ana komut türü vardır. Bash'de basit komutların nasıl yorumlandığını bilmek, çalışma zamanında ne tür bir komutun yürütüleceği üzerinde gelişmiş kontrole yol açabilir.