.bashrc tidak dieksekusi saat membuka terminal baru

84

Kode dalam .bashrc tidak dieksekusi ketika saya membuka jendela terminal baru di Ubuntu 12.04. Saya perhatikan ini saat membuat file .bash_aliases. Alias ​​tidak muncul ketika saya membuka terminal baru. Namun ketika saya mengetik source .bashrcalias muncul.

.bashrc harus dijalankan setiap kali saya membuka jendela terminal baru bukan?

Bagaimana saya mewujudkan ini?

Selamanya
sumber
Coba. Profil sebagai gantinya.
jippie
4
@ jippie Tidak, .profiledibaca saat login, bukan saat Anda membuka terminal baru, kecuali ada kesalahan konfigurasi di suatu tempat. Selamanya: apakah Anda mengubah sesuatu dari konfigurasi default? Silakan jalankan ps -o command $$ $PPIDdi terminal dan salin-tempel hasilnya.
Gilles
1
Hanya untuk memastikan, Anda meletakkan .bashrcdi folder rumah Anda, kan?
Jjed
Mungkin ingin memeriksa echo $SHELL. Ini terjadi pada saya dan shellnya adalah / bin / sh bukannya bash. Perbaiki di / etc / passwd dan menjalankannya .bashrc.
Joe Flynn

Jawaban:

129

Itu belum tentu berjalan; di bagian atas standar .bashrc adalah komentar ini:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

Saya percaya ada opsi untuk menjalankan terminal bash sebagai shell login atau tidak. Dengan Ubuntu, gnome-terminal biasanya tidak berjalan sebagai shell login, jadi .bashrc harus dijalankan secara langsung.

Untuk kerang login (seperti terminal virtual), biasanya file tersebut ~/.profiledijalankan, kecuali jika Anda memiliki baik ~/.bash_profileatau ~/.bash_login, tetapi mereka tidak ada secara default. Secara default, Ubuntu hanya menggunakan .profile.

Standar ~/.profilememiliki ini di dalamnya:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

Ini menjalankan .bashrc jika tersedia - dengan asumsi $ BASH_VERSION ada di lingkungan Anda. Anda dapat memeriksa ini dengan memasukkan perintah echo $BASH_VERSION, dan itu akan menampilkan beberapa informasi pada nomor versi - itu tidak boleh kosong.

Marty Fried
sumber
4
Setelah memahami instruksi ini, saya masuk ke aplikasi terminal saya untuk mengedit -> preferensi profil -> Judul dan Perintah -> Jalankan perintah sebagai shell login. Saya tidak mencentang ini. Terima kasih untuk bantuannya.
Sela
Bisakah Anda mengklarifikasi kapan .profile (karenanya .bashrc) dimuat / dibaca? Sepertinya ini dilakukan ketika pengguna masuk ke sesi desktop mereka. Jawabannya menunjukkan ini terjadi ketika Anda memulai sesi terminal / shell baru "Untuk shell login (seperti terminal virtual), biasanya file ~ / .profile dijalankan ..."
hedgehog
4
Ini biasanya dijalankan ketika Anda memulai shell login baru (tidak benar-benar sesi desktop, karena Anda dapat menjalankan shell login baru dari sesi desktop). Seperti yang saya katakan, ini dijalankan secara default, tetapi tidak jika Anda telah membuat ~/.bash_profileatau ~/.bash_login. Anda dapat menguji dengan mencentang atau menghapus centang pada kotak centang Edit -> Profile Preferences -> Title and Command -> "Run command as a login shell, dan keluar kemudian jalankan kembali terminal. Anda dapat menggemakan sesuatu dari .profile untuk menguji.
Marty Fried
@Selah Komentar Anda membantu saya lebih dari jawaban yang sebenarnya;) terima kasih banyak untuk membuat komentar!
Aleks
Jadi jika Anda telah membuat ~/.bash_profileatau ~/.bash_loginpada sistem Anda dan ingin menyimpannya, tetapi masih ingin ~/.profiledan dari sana ~/.bashrcdieksekusi, Anda dapat mengambilnya dari milik Anda sendiri ~/.bash_profileatau ~/.bash_logindengan baris yang berisi source "$HOME/.profile". Memberi Anda output berwarna ls juga di shell login!
tanius
26

Dalam kasus saya, hanya .bashrcgaris pemuat yang hilang.bash_profile

# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
fi

Saya menambahkannya secara manual dan bekerja dengan login baru saya

pengguna3584014
sumber
3
.bash_profile? Ubuntu menggunakan secara .profiledefault, bukan .bash_profile.
muru
server ubuntu sering tidak mengambil .bashrc ... di atas berfungsi juga ... cat .bash_profile [[-s "$ HOME / .bashrc"]] && sumber "$ HOME / .bashrc" # Muat default
Scott Stensland
Ini menyelesaikannya untuk saya! Saya menambahkan pcredan sepertinya menimpa profil bash alih-alih menambahkannya.
shapiro yaacov
7

.bash_profilememegang konfigurasi untuk bash shell. Saat Anda membuka terminal, terminal itu pertama kali membaca dan mengeksekusi perintah ~/.bash_profile. Jadi, Anda dapat menambahkan berikut ini .bash_profileuntuk mengatur shell sesuai dengan bashrc.

. ~/.bashrc
SD.
sumber
Kecuali terminal Anda menjalankan shell login (yang tidak secara default di Ubuntu), ~/.bash_profiletidak akan dibaca (dan tidak ada secara default di Ubuntu)
muru
5

Jika $BASH_VERSIONtidak disetel, coba gunakan chshperintah untuk mengatur shell Anda /bin/bash.

Saya memiliki masalah yang sama dengan 12,04 LTS, dan ternyata akun pengguna baru memiliki set default shell /bin/sh, yang merupakan penyebab masalah.

evan_b
sumber
Inilah alasannya!
mulya
1

Mengakses komentar di. Profil

~ / .profile: dijalankan oleh command interpreter untuk shell login. ¬ 11 File ini tidak dibaca oleh bash (1), jika ~ / .bash_profile atau ~ / .bash_login¬ 10 # ada

Jadi begitulah, jika ~/.bash_profileatau ~/.bash_login exists, itu akan dijalankan bukan~/.profile

jika Anda ingin menjalankan ~/.bashrchanya menambahkan baris source ~/.bashrcdibash_profile

Nic Wanavit
sumber
1
Saya telah mengalami masalah yang sama persis. Saya .bashrcsedang bersumber sampai saya membuat sebuah .bash_profilefile yang. Jadi saya menambahkan source ~/.bashrc baris ke .bash_profilefile saya .
Lashae
0

Alih-alih melewati semua itu hanya pergi Edit -> Profile Preferences -> Title and Command -> "Run a custom command instead of my shell"dan di kotak perintah Kustom menulis bashdan menutupnya. Lain kali Anda akan membuka terminal, terminal juga akan menjalankan bash secara otomatis.

Furqan Ali
sumber
GUI mana yang Anda maksud? gnome or unity
Nic Wanavit