Menurut jawaban untuk Apa itu shell login dan non-login? di Ask Ubuntu, Terminal GNOME adalah jenis shell non-login.
Seperti yang ditunjukkan dalam buku yang sangat bagus, Panduan Praktis untuk Fedora dan Red Hat Enterprise Linux, Edisi ke-6 :
shell non-login interaktif mengeksekusi perintah dalam file ~/.bashrc. File ~/.bashrc default memanggil /etc/bashrc.
Akibatnya, /etc/profile
tidak akan diproses di shell non-login. Namun, saya menemukan bahwa saya telah menambahkan jalur beranda Java ke PATH
variabel dan, ketika saya menggunakan Terminal GNOME dan mengeluarkan perintah java
, semuanya berjalan dengan baik. Juga, nilai PATH
variabel sama dengan nilai yang saya definisikan di /etc/profile
.
Melihat fakta tersebut di atas, ada konflik, apa yang salah dengan pemahaman saya?
Jawaban yang Diterima:
Saat Anda masuk ke sesi x Anda melalui pengelola tampilan atau di tty, /etc/profile
adalah (biasanya – tampaknya sedang dalam kasus Anda, meskipun beberapa shell grafis tidak membacanya) bersumber dari program shell Anda. Setelah itu, file lokal (saya berasumsi Anda menggunakan bash di sini) ~/.bash_profile
, ~/.bash_login
atau ~/.profile
akan bersumber, dan variabel lingkungan apa pun yang ditentukan di sini akan menimpa /etc/profile
untuk pengguna saat ini. Lingkungan ini diwariskan oleh shell apa pun yang Anda buka dalam sesi. Inilah sebabnya mengapa kami dapat mendefinisikan variabel lingkungan, seperti PATH Anda, dalam file-file ini.
Saat Anda membuka gnome-terminal, ya secara default yang memulai shell non-login, tetapi mewarisi lingkungan pengguna Anda yang sudah dimuat dari shell login atau shell grafis. Sejak ~/.bashrc
bersumber ketika memulai shell interaktif (misalnya membuka terminal gnome), itu dapat digunakan untuk menimpa beberapa elemen lingkungan (seperti PS1).
(gnome-terminal itu sendiri adalah aplikasi, bukan shell)