Bash'i ayrıntılı olarak çalıştırma

Bu sayfayı bir aramada bulduysanız, muhtemelen bash çalıştırmayla ilgili bir sorunu çözmeye çalışıyorsunuzdur.

Belki de bash ortamınız bir ortam değişkeni ayarlamıyordur ve nedenini anlamıyorsunuz. Çalışıncaya kadar çeşitli bash önyükleme dosyalarına veya profillerine veya tüm dosyalara rastgele bir şey yapıştırmış olabilirsiniz.

Her durumda, bu notun amacı, sorunları çözebilmeniz için bash'ı başlatma prosedürünü mümkün olduğunca basit bir şekilde ortaya koymaktır.

Диаграмма

Bu akış şeması bash çalıştırılırken yapılan tüm işlemleri özetler.

Bash'i ayrıntılı olarak çalıştırma

Şimdi her bir parçaya daha yakından bakalım.

Giriş Kabuğu?

Öncelikle giriş kabuğunda olup olmadığınızı seçmeniz gerekir.

Oturum açma kabuğu, etkileşimli bir oturum için oturum açtığınızda girdiğiniz ilk kabuktur. Oturum açma kabuğu kullanıcı adı ve parola gerektirmez. Bir bayrak ekleyerek giriş kabuğunu başlamaya zorlayabilirsiniz. --login çağrıldığında bashÖrneğin:

bash --giriş

Oturum açma kabuğu, bash kabuğunu ilk başlattığınızda temel ortamı ayarlar.

İnteraktif mi?

Daha sonra kabuğun etkileşimli olup olmadığını belirlersiniz.

Bu, değişkenin varlığıyla kontrol edilebilir PS1 (komut giriş fonksiyonunu yükler):

if [ "${PS1-}" ]; sonra echo etkileşimli else echo etkileşimli olmayan fi

Veya seçeneğin ayarlanıp ayarlanmadığını görün -iözel bir tire değişkeni kullanarak - örneğin bash'ta:

$echo$-

Çıktıda bir sembol varsa i, o zaman kabuk etkileşimlidir.

Giriş kabuğunda mı?

Oturum açma kabuğundaysanız bash dosyayı arar /etc/profile ve varsa çalışır.

Daha sonra bu üç dosyadan herhangi birini aşağıdaki sırayla arar:

~/.bash_profile ~/.bash_login ~/.profile

Birini bulduğunda onu başlatır ve diğerlerini atlar.

Etkileşimli bir kabukta mı?

Oturum açmayan bir kabuktaysanız, zaten bir oturum açma kabuğunda bulunduğunuz, ortamın yapılandırıldığı ve devralınacağı varsayılır.

Bu durumda, eğer varsa, aşağıdaki iki dosya sırayla yürütülür:

/etc/bash.bashrc ~/.bashrc

Seçenek yok?

Bir oturum açma kabuğunda veya etkileşimli bir kabukta değilseniz, ortamınız gerçekten boş olacaktır. Bu çok fazla kafa karışıklığına neden olur (cron işleri hakkında aşağıya bakın).

Bu durumda bash değişkene bakar BASH_ENV ortamınız ve orada belirtilen ilgili dosyayı oluşturur.

Yaygın Zorluklar ve Temel Kurallar

Cron işleri

Bash başlangıcında hata ayıklamamın %95'i cron işinin beklendiği gibi çalışmamasından kaynaklanıyor.

Bu lanet görev komut satırında çalıştırdığımda düzgün çalışıyor ancak crontab'da çalıştırdığımda başarısız oluyor.

öyle iki sebep:

  • Cron işleri etkileşimli değildir.
  • Komut satırı komut dosyalarının aksine, cron işleri kabuk ortamını devralmaz.

Ortam etkileşimli kabuktan miras aldığı için genellikle bir kabuk komut dosyasının etkileşimli olmadığını fark etmez veya umursamazsınız. Bu şu anlama geliyor: her şey PATH и alias beklediğiniz gibi yapılandırılmıştır.

Bu nedenle genellikle belirli bir değer belirlemek gerekir. PATH buradaki gibi bir cron görevi için:

* * * * * PATH=${PATH}:/path/to/my/program/folder myprogram

Scriptler birbirini çağırıyor

Diğer bir yaygın sorun, komut dosyalarının yanlışlıkla birbirini çağıracak şekilde yapılandırılmasıdır. Örneğin, /etc/profile hitap eder ~/.bashrc.

Bu genellikle birisi bir hatayı düzeltmeye çalıştığında ve her şey çalışıyor gibi göründüğünde olur. Ne yazık ki bu farklı seans türlerini ayırmak gerektiğinde yeni sorunlar ortaya çıkıyor.

Korumalı alana alınmış Docker görüntüsü

Bir kabuk çalıştırmayı denemek için, bir kabuğun güvenli bir ortamda çalıştırılmasında hata ayıklamak için kullanılabilecek bir Docker görüntüsü oluşturdum.

Başlatmak:

$ docker run -n bs -d imiell/bash_startup
$ docker exec -ti bs bash

Dockerfile'ın bulunduğu yer burada.

Oturum açmayı zorlamak ve oturum açma kabuğunu simüle etmek için:

$ bash --login

Bir dizi değişkeni test etmek için BASH_ENV:

$ env | grep BASH_ENV

Hata ayıklama için crontab her dakika basit bir komut dosyası çalıştırılacaktır (içinde /root/ascript):

$ crontab -l
$ cat /var/log/script.log

Kaynak: habr.com

Yorum ekle