Bir giriş kabuğu olarak bash'ı başlatmak için gnome-terminalini yapılandırın .bashrc


24

RVM'yi gnome-terminali ile entegre etmeye çalışıyorum .

Varsayılan olarak, gnome-terminali bash'ı giriş kabuğu olarak başlatmaz. RVM'yi ayarlayan aynı konu hakkında bu cevaptarun command as a login shell önerildiği gibi etkinleştirdim , ancak bunu yaptığımda dosya okunmuyor..bashrc

Örneğin, içinde bir ortam değişkeni yaratıyorum .bashrcve sonra yeni bir gnome-terminal başlattığımda okuyamıyorum. source .bashrcDosyayı okumak için açıkça çalıştırmam gerekiyor .

Beklenen davranış bu mu?

Yanıtlar:


38

Evet, beklenen davranış budur.

Kısacası, davranış şu şekildedir:

  • bash etkileşimli bir giriş kabuğu olarak başladı: okur ~/.profile
  • bash etkileşimli bir giriş olmayan kabuk olarak başladı: okur ~/.bashrc

Daha fazla bilgi için başlangıç ​​dosyaları hakkındaki bash kılavuzunu okuyun .

Şahsen, bu davranışın garip olduğunu düşünüyorum ve bu tasarım kararı için henüz rasyonelleştirme bulamadım.


Terminolojinin bazı açıklamaları:

  • Bir etkileşimli kabuk Eğer, bunun komutları yazabilirsiniz o aracı etkileşim sağlayan bir kabuk. Kullanacağınız kabukların çoğu etkileşimli kabuklardır.
  • Bir etkileşimli olmayan kabuk bir kabuk hangi ile etkileşim olamaz. Shell scriptleri etkileşimli olmayan kabuklarda yayınlanır.
  • Bir giriş kabuğu sisteminizde giriş yaptığınızda başlatılır kabuktur.
  • Bir olmayan giriş kabuk giriş işleminden sonra başlatılan bir kabuktur.

Gördüğünüz çoğu mermi etkileşimli, giriş yapmayan mermilerdir . Bu özellikle, eğer gnome gibi grafiksel bir ortam kullanıyorsanız geçerlidir, çünkü gnome "login kabuğu" dır. GNOME içinde başlayan herhangi bir bash oturumu oturum açma kabuğudur. Gerçek bir etkileşimli giriş kabuğu görmek istiyorsanız sanal bir konsola (kullanarak Ctrl+Alt+F1) gidin ve daha sonra kullanıcı adınızı ve şifrenizi kullanarak giriş yapın. Bu gerçek bir etkileşimli giriş bash kabuğu. Kullanarak grafik kabuğuna geri dönebilirsiniz Ctrl+Alt+F7.

--loginGiriş yaptıktan sonra başlasanız bile bash'in bir giriş kabuğu gibi davranmasını sağlayan bir seçenek vardır. Gnome-terminalinin bash'ı giriş kabuğu olarak başlatacak şekilde yapılandırılması --loginseçeneği kullanarak bash başlayacağı anlamına gelir .


Genellikle bash'in her zaman ~/.bashrcetkileşimli bir kabukta okumasını istersiniz . Bunu yapmamı nasıl tavsiye edeceğim:

Bir ~/.bash_profiledosya oluşturun . Bash bir giriş kabuğu olarak başlatılmışsa, ~/.bash_profileönce arama yapmadan önce arayacaktır ~/.profile. Bash bulursa ~/.bash_profileo zaman okumaz ~/.profile.

Aşağıdaki satırları içine yerleştirin ~/.bash_profile:

[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"

Şimdi bash etkileşimli bir giriş kabuğu olarak başlatılırsa, aşağıdaki dosyaları okuyacak:

  1. ~/.bash_profile
  2. ~/.profile
  3. ~/.bashrc

ve bash etkileşimli bir giriş olmayan kabuk olarak başlatılmışsa:

  1. ~/.bashrc

Bash'a özgü olanları ~/.bashrcve bash'a özgü olmayanları koymalısınız ~/.profile. Örneğin PATHgider ~/.profileve HISTCONTROLgider ~/.bashrc.

~/.profileBash'a özgü olmadığını unutmayın . Diğer metin tabanlı kabukları (örneğin sh veya ksh) ve grafik kabukları (cüceler) de okuyun ~/.profile. Bu yüzden bash'a özel şeyler koymamalısın ~/.profile.


1
+1. Teşekkürler, bu beni duvardan
aşağı sürüyordu

1
mywiki.wooledge.org/DotFiles bunun nasıl bir şey olduğunu açıklar. Rvm ile bu sorunun ana nedeni olsa da, rvm ~/.bashrc, ilk sırada yer alması gereken, yerine profil kodunu koyar . Arıza rvm'de.
geirha

@Geirha başına onlar kullanılmış olması gerekirdi~/.profile
sanmai, 0

Bunun sebebi, profil komut dosyasının .bashrcyapması gerekenin göreli değerlendirmesini kontrol edebilmesidir . İnteraktif kabuk her zaman okunuyorsa .bashrc, bu önce mi sonra .profilemı olmalı ? Peki .bashrcbunun için .profilegereken bazı şeyleri ayarlamak istersen ? Ve aynı zamanda bazı şeylerin .bashrcayarladığı bir şeye güvenmesini mi istiyorsunuz .profile? Her iki yükleme sırası da iki senaryoyu da karşılayamaz.
Kaz

11

Bu ne kötü bir tasarım kararı, ne bir hata, ne de mermilerin ve terminallerin beklenen bir davranışı değil

Bu, Gnome Terminali'nde, kolayca düzeltebileceğiniz bir profil başına yapılandırma seçeneğinin talihsiz bir varsayılan değeridir.

  1. Git Edit -> Profil Tercihler .

  2. Seç Başlık ve Komut sekmesi.

  3. Uyarı nasıl giriş kabuğu olarak çalıştır komutu onay kutusunun işaretlenmemiş olduğundan! Kontrol et.

Bu kadar. Bunu Defaultprofile veya yeni terminaller yapılırken kullanılacak profil için ne yaparsanız yapın bir giriş kabuğu alırsınız.

Başlık altında, bu seçeneğin muhtemelen -lseçeneği kabuğa geçirmesine neden olduğunu tahmin ediyorum .


0

Aynı soruyu sordum ve bir çözüm buldum: Gerçek bir giriş kabuğu için SSH kullanın!

1. Süper kullanıcı olarak, tam izolasyon için özel bir rvm sistemi kullanıcısı oluşturun ve bir şifre atayın:

sudo su

useradd -m rvmuser

passwd rvmuser

2. Bağımlılıkları kurun, böylece rvm, superuser şifresini istemeden yakutlar oluşturabilir:

apt-get install curl gawk libreadline6-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake bison libffi-dev

3. Gerçek bir giriş kabuğu için localhost içine SSH (gerekebilir apt-get install ssh)

ssh rvmuser@localhost

4. rvm'i yükleyin

\curl -sSL https://get.rvm.io | bash -s stable

5. Tüm rvm işlevlerinin yüklenmesi için oturumu kapatıp tekrar açın.

exit

ssh rvmuser@localhost

6. rvm :) kullanın


0

Profil başlangıcını yerleştirmek için bash kullanılırken .bash_profile, sadece oturum açma sırasında sadece bash tarafından okunan, ancak diğer kabuklar tarihsel olarak paylaşılmış olanlarda yaygındır .profile. Bu, bash'a özgü komutları içeri yerleştirmenizi sağlar .bash_profile.

Aşağıdakilerin kullanımı, genellikle tanımlanmış takma adları almak için yapılır .bashrc:

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
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.