Bas betiğindeki komutlar ile terminaldeki komutlar arasındaki fark


13

Terminale yazdığınız komutlar ile bir komut dosyasına eklediğiniz komutlar arasında herhangi bir fark var mı?


Kesinlikle aptalca bir soru değil! Check out bu , (birinci) daha sonra bu ve bu .
Emanuel Berg

Yanıtlar:


7

Terminaliniz bir komut çalıştırır (büyük olasılıkla bash), komutlarınızı soran ve bunları çalıştıran olan.

Bu etkileşimli modun yanı sıra, bir dosyadan komut çalıştırmak için kabuğunuzu da kullanabilirsiniz. Dosyanızdaki komutları yürütmek için kabuğu doğrudan çağırabilir bash scriptveya dosyanızı bir "shebang" ile başlatabilir #!/bin/bashve yürütülebilir ( chmod +x script) yapabilirsiniz. Sonra komut dosyasını bir ikili gibi ele alabilir ve örneğin olarak çalıştırabilir ./scriptveya kabuğun aradığı bir yere koyabilirsiniz. ( echo $PATH)

Muhtemelen hem etkileşimli kabuğunuz hem de çalıştırmak için kullanılan kabuktur bash. "İlk gün öğrenme linux" bash açısından her iki modda da tamamen aynı şekilde çalışır. - Daha sonra ufak farklar hakkında tökezleyebilirsiniz. Eğer gerçekten ayrıntılı olarak bilmek istiyorsanız, okuma man bashve "interaktif" bahseden yerleri aramak öneririz . (Tuşuna basarak bir adam sayfasında arama yapabilirsiniz /.)

Dikkat edilmesi gereken önemli bir nokta, betiğin yeni bir işlem olarak çalıştırılmasıdır. Bu özellikle kodda ayarlanan değişkenlerin çağıran kabukta görünmediği anlamına gelir.

$ export a=1
$ echo $a
1
$ bash -c 'echo $a;a=2;echo $a' # change the value in a script
1
2
$ echo $a # value not changed here
1
$ 

Dışa aktarma olmadan aiç komut dosyası bile görünmez.


1

Genel olarak, cevap "hayır" olurdu, kabuktaki komutlar, komut dosyalarında, sözdiziminde ve anlambiliminde aynıdır.

Ancak, ortamın yapılandırılmasıyla ilgili bir grup küçük nüans var (hangi değişkenlerin kullanıldıkları ve nelere ayarlandıkları).

  • Linux için seçim interaktif kabuk bash, ancak komut dosyası genellikle (diğer tercüman kullanan shbir öncülü olan bash, kshkullandığınız hangi kabuk dikkate almak zorunda, (şimdiki kabuğun adının, bash ile ilgili par olan) geleneksel olarak değişkendir SHELL, yazmayı deneyin echo $SHELL).

  • etkileşimli oturum ve komut dosyası yürütme için aynı yorumlayıcının yapılandırılmasında farklılıklar olabilir.


-1

Hayır. Komut dosyası, terminale yazabileceğiniz komutların listesidir.

Bir komut dosyasının toplamını terminale yapıştırabilirsiniz ve sonuç onu çalıştırmakla aynı olacaktır.

Tersine, terminal komutlarınızı bir dosyanın içine "kaydedebilir" ve yeniden kullanılabilir bir komut dosyasına dönüştürebilir ve aileniz ve arkadaşlarınızla paylaşabilirsiniz.


4
Hayır. İçeriğin yapıştırılması komut dosyasının kaynaklanmasına eşdeğerdir. Bu, geçerli kabuktaki komut dosyasını çalıştırarak değiştirilmeyecek her türlü seçeneği değiştirir.
michas

haklısın. ama sorularına göre. Bence oldukça benzer diyebiliriz. ama evet, mikrofonların söylediklerini noob'er terimleriyle çevirmek. komut dosyasının içeriğini yapıştırma yapmakla eşdeğerdir source script_file. ENV'yi düzenleyen mevcut bağlamda değişiklik gösterir. betiği çalıştırırken, açıkça kullanılmadıkça ./script_fileENV'yi değiştirmez export.
Mathieu J.27

1
Hayır. Bununla birlikte export, bir komut dosyasının çağrı kabuğunun herhangi bir değişkenini değiştirmesi mümkün değildir. Aynı şey PWD, tanımlanmış takma adlar, işlevler ve bunun gibi şeyler için de geçerlidir. Yalnızca etkileşimli olarak veya bir dosya kaynaklanarak değiştirilebilirler. Ama evet, muhtemelen ilk gün birisi yanacak bir şey değil. :)
michas

1
@michas: Doğru açıklamayı vermek hala daha iyi. Başlangıç ​​seviyesi hırslıysa ve çalışma alışkanlıkları varsa, çabucak toplanır. Çocuğun hikayesini anlatmaya çalışırsak, sadece ayaklarımıza çarpar ve anlaşılmaz bir izlenim bırakırız - ayrıca, acemi daha sonra geri gelebilir. Kendimi yeni başlayan biri olarak görmese de, bilmediğim bir çok şey var ve kimse sorularıma cevap veren herhangi bir şeyi sakladığı için “henüz orada değilsin, küçük” diye hakaret edeceğim.
Emanuel Berg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.