~ / .Bash_login kullanarak girişte bir komut dosyası çalıştırın


15

Ubuntu'ya giriş yaptığımda ve oturumu kapattığımda bir komut dosyası çalıştırmam gerekiyor.

Senaryoyu içine koymaya çalıştım ~/.bash_loginama işe yaramadı.

Senaryomu çalıştırabileceğim daha iyi bir yer var mı?

Betikim içinde /home/gsd/script/login.shve çalıştırılabilir.

Düzenle:

Komutum i yazdığımda çalışır: /home/gsd/script/login.shve + x ile ayarlanır

Şimdi, ben sadece var: touch /home/gsd/test.txtiçinde ~/.bash_logintest.

test.txt dosyası asla oluşturulmadı

düzenleme 2:

gsd@laptop:~$ ll ~/.bash*
-rw------- 1 gsd gsd 38639 2012-01-25 17:25 .bash_history
-rw-r--r-- 1 gsd gsd    29 2012-01-25 15:22 .bash_login
-rw-r--r-- 1 gsd gsd   220 2011-11-03 19:22 .bash_logout
-rw-r--r-- 1 gsd gsd  3136 2011-11-04 08:00 .bashrc

.bash_login doğru izinlere sahip mi? ls -l .bash_login ne döndürür?
santiagozky

Ayrıca bir var ~/.bash_profilemı?
enzotib

-rw-r--r-- 1 gsd gsd 313 2012-01-22 11:56 .bash_login
Gino Sullivan

1
chmod +x .bash_login
Zoke

1
chmod +x .bash_login(.Bash_login üzerinde yürütülebilir biti ayarlamak) gerekli değildir . Bash kılavuzu bu alanda biraz kafa karıştırıcı, ancak Bash .bash_login'i bir kabuk betiği gibi eXecute yapmaz. Dosyayı okur ve içindeki komutları yürütür (Çalıştırarak benzer bir şey yapabilirsiniz source ~/.bash_login).
Stefan Lasiewski

Yanıtlar:


20

.Bash_profile varsa, Bash .bash_login (veya .profile) okumaz. Bu sinir bozucu özellik, Bash kılavuzunun bazı sürümlerinde açıklanmıştır, ancak hepsi değil.

.bash_profileve .bash_loginbenzerdir, bu yüzden komutlarınızı koymanızı tavsiye ederim .bash_profile, çünkü yaygın olarak kullanılır ve .bash_loginnispeten bilinmez. Ayrıca komutlarınızı koymak .bashrcyerine.bash_profile . Kılavuzda "etkileşimli giriş yapmayan kabuk" ile "etkileşimli giriş kabuğu" arasındaki fark açıklanmaktadır, bu yüzden bu bölümü mutlaka okuyun.

GNU Bash Başvuru Kılavuzu sürüm 4.1: Bash Başlangıç ​​Dosyaları :

~ / .bash_profile, ~ / .bash_login ve ~ / .profile dosyalarını bu sırayla arar ve var olan ve okunabilir olan ilk komutları okur ve yürütür .

Ayrıca süper kullanıcı ile ilgili bu soruyu ve bu Bash nasıl yapılır (freeunix.dyndns.org:8088 adresi tarafından caydırılmayın --- hala kaliteli bir el kitabı ve yıllardır kullanıyorum).

Bir .bash_profile dosyanız olmadığını söylediğiniz için güncelleyin .

Görünüşe göre, "etkileşimli giriş yapmayan kabuk" olarak adlandırılan bir kabuk kullanmıyorsunuz (Ayrıntılı açıklama için Bash kılavuzuna bakın).

Bunu test etmek için, aşağıdaki her dosya gibi bir şey ekleyin: .bashrc, .bash_profileve .bash_login.

echo "DEBUG: I am .bashrc"

echo "DEBUG: I am .bash_profile"

Ardından oturumu kapatın ve tekrar oturum açın. Giriş yaptığınızda, bahse girerim sadece "DEBUG: Ben .bashrc" diyorum ama "Ben .bash_profile" değil. Öyleyse, "etkileşimli bir giriş yapmayan kabuk" olduğunuz anlamına gelir, bu da Bash'in arayacağı, .bashrcancak çağrılamayacağı anlamına gelir .bash_profile. Bu nokta dosyalarının neden oldukları gibi bilgi için aşağıdaki @Andrejs Cainikovs'un gönderisine ve http://mywiki.wooledge.org/DotFiles adresine bakın.


sorumu güncelledim, bash_profile'm yok
Gino Sullivan

Tamam, çünkü daha önce "evet bash profilim var" dedin.
Stefan Lasiewski

Evet, daha sonra kaldırdım ama aynı sonuçlar
Gino Sullivan

3
Bu cevap sorunu çözüyor, bence kabul etmeye değer.
Marius Butuc

1
Ayrıca, bu bash dosyalarının GUI'de oturum açarken değil, yalnızca bir kabukta oturum açarken (Terminal, ssh vb. Aracılığıyla) çalıştırıldığını unutmayın!
mivk

6

Bakılmaksızın eğer arasında kabuklarını giriş interaktif veya etkileşimli olmayan okuma ve yürütme.profile

Etkileşimli kabuklar okunur ve çalıştırılır .bashrc.

Genellikle /etc/profilekaynakların görüldüğünü göreceksiniz .bashrc- bu nedenle yapılan tüm ayarlar .bashrc, etkileşimli veya etkileşimli olup olmadığına bakılmaksızın bir giriş kabuğunda da etkili olacaktır.

Kabuk için başlatma komut dosyalarının yürütme sırası, kabuğun etkileşimli veya etkileşimli olup olmadığına ve bir oturum açma komut dosyası olup olmadığına bağlı değildir.

Bash etkileşimli bir giriş kabuğu olarak çağrıldığında, komutları okur ve çalıştırır /etc/profile. Daha sonra Bash SADECE ilk dosya var ve aşağıdakilerin okunabilir çalışmasını dener:

  1. .bash_profile
  2. .bash_login
  3. .profile

Bu dosyalardan biri bulunur ancak okunamazsa, hataya neden olur. Herhangi eğer bir hata yok DEĞİL bulundu.

Aynı işlem, etkileşimli olmayan bir giriş kabuğu --loginseçeneği ile çağrıldığında da izlenir .


1
AFAIK, .profiledosya yalnızca kullanıcı grafik arayüzü kullanarak oturum açtığında okunur ve yürütülür. Aksi takdirde okunmaz.
RajaRaviVarma

@RajaRaviVarma Az önce test ettim (Ubuntu 16.04) ve ~/.profilekesinlikle grafiksel olmayan giriş kabuklarında okunuyor (başka bir terminale geçip Ctrl+Alt+F2orada oturum açarak test ettim ).
waldyrious

Ben SSH üzerinden bir Ubuntu 16.04 VM giriş ediyorum ve - ben @RajaRaviVarma katılıyorum .profile, sadece okumak için değil.bashrc
JamesC

0

Çalıştırmak istediğiniz komut dosyasının yürütülebilir olduğundan emin olun. chmod +x scriptnameBunu yapmak için koş . Ayrıca betiğin doğru gövdeyle başladığından emin olun ( #!/bin/bashkabuk betikleri için). Örneğin, bunu yürütürken Son olarak, tüm tam yollarını kullanmak /usr/bin/echoyerine echode çalıştırır betiğinize alıştığınız birine özdeş olmadığını sadece örtmek çevreye.


0

Bash sadece arar .bash_loginya .profileda etkileşimli giriş kabuğu olarak yürütülürse dosyaları. Etkileşimli oturum açma dışı kabuk olarak yürütüldüğünde okur .bashrc.
Genellikle ikinci durumdur, yani gnome-terminalbash'ı çalıştırdığınızda oturum açma kabuğu olarak çalıştırılır.

Bu açıkça Gnome içine önyükleme yaparsanız .bash_loginyürütülmeyeceğini belirtir . Ancak doğrudan bash'a önyükleme yapmak için çalışma düzeyini düşürürseniz, aynı dosya başarılı bir şekilde oturum açıldığında yürütülür. Uzak SSH bağlantılarında da yürütüleceğini
varsayıyorum .bash_login.

Buradan kısmen sökük .

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.