GNU/Linux >> Belajar Linux >  >> Linux

Mengapa ~/.bash_profile Tidak Berfungsi?

Saya menggunakan Linux Mint. Shell login saya (cat /etc/passwd | grep myUserName ) adalah bash.

Setelah saya memulai lingkungan desktop grafis saya dan menjalankan emulator terminal darinya, saya dapat melihat .bash_profile itu tidak bersumber (var lingkungan yang export ed di dalamnya tidak disetel). Tetapi jika saya masuk dari konsol teks (ctrl +alt +F1 ) atau jalankan bash -l . secara manual dari emulator terminal, .bash_profile bekerja dengan baik.

Apakah saya salah ketika saya berpikir bahwa .bash_profile harus bersumber ketika X dimulai dan semua export 'ed vars harus tersedia di terminal, dijalankan dari X?

P.S. Menempatkan semuanya di .bashrc dan mengambilnya dari .bash_profile bukan ide yang baik (https://stackoverflow.com/questions/902946/):hal-hal lingkungan harus bersumber hanya sekali.

Jawaban yang Diterima:

File ~/.bash_profile dibaca oleh bash ketika itu adalah shell login. Itulah yang Anda dapatkan saat masuk dalam mode teks.

Saat Anda masuk di bawah X, skrip startup dijalankan oleh /bin/sh . Di Ubuntu dan Mint, /bin/sh adalah tanda hubung, bukan bash. Dash dan bash keduanya memiliki fitur inti yang sama, tetapi dasbor menempel pada fitur inti ini agar cepat dan kecil sedangkan bash menambahkan banyak fitur dengan biaya yang membutuhkan lebih banyak sumber daya. Biasanya menggunakan tanda hubung untuk skrip yang tidak memerlukan fitur tambahan dan bash untuk penggunaan interaktif (meskipun zsh memiliki banyak fitur yang lebih bagus).

Sebagian besar kombinasi pengelola tampilan (program tempat Anda mengetik nama pengguna dan sandi) dan lingkungan desktop membaca ~/.profile dari skrip login di /etc/X11/Xsession , /usr/bin/lightdm-session , /etc/gdm/Xsession atau mana saja yang dapat diterapkan. Jadi letakkan definisi variabel lingkungan Anda di ~/.profile . Pastikan untuk hanya menggunakan sintaks yang didukung tanda hubung.

Jadi apa yang harus Anda taruh di mana?

  • .bash_profile yang bagus memuat .profile , dan memuat .bashrc jika cangkangnya interaktif.

    . ~/.profile
    if [[ $- == *i* ]]; then . ~/.bashrc; fi
    
  • Di .profile , masukkan definisi variabel lingkungan, dan setelan sesi lainnya seperti ulimit .

  • Di .bashrc , masukkan pengaturan interaktif bash seperti alias, fungsi, penyelesaian, ikatan kunci (yang tidak ada di .inputrc ), …
Terkait:Debian 9:Setelah memutakhirkan dari 8, MySQL (MariaDB) tidak lagi berfungsi?
Linux
  1. Menyesuaikan shell Bash

  2. Mengapa Ekspresi Reguler Bekerja Di X Tapi Tidak Di Y?

  3. Mengapa Bash Prompt Disadap Saat Saya Menelusuri Riwayat??

  1. Mengapa Skrip Bash Tidak Keluar Setelah Eksekusi?

  2. Mengapa `zip` Dalam A For Loop Bekerja Saat File Ada, Tapi Tidak Saat Tidak?

  3. Mengapa Dokumen Induk Shell Di Sini Tidak Berfungsi Untuk Sub-perintah Di Dash Tapi Bash Bekerja?

  1. Mengapa The Tilde (~) Tidak Memperluas Di Dalam Kutipan Ganda?

  2. Mengapa Bash `(())` tidak berfungsi di dalam `[[]]`?

  3. Mengapa bit setuid bekerja tidak konsisten?