Secara historis, file profil ( /etc/profile
dan ~/.profile
) dipanggil ketika Anda masuk (pada konsol teks, apa lagi?) Dan melayani banyak tujuan:
- Setel variabel lingkungan dan parameter lain (mis. Umask) untuk sesi tersebut.
- Jalankan program tambahan di awal sesi (mis. Pemberitahuan email).
- Jalankan program untuk sesi ini, jika berbeda dari shell (mis. Shell lain atau X Window).
- Setel parameter terminal (mis
stty
.).
- Setel parameter shell (mis. Alias).
Semua tujuan ini tidak diidentifikasi sebagai terpisah sampai nanti. Karena skrip profil dapat melakukan hal-hal yang hanya masuk akal dalam sesi interaktif (interaksi terminal, memulai program lain), ketika pemanggilan shell jarak jauh ( rsh ) diperkenalkan, merek rsh memutuskan untuk tidak memanggil shell jarak jauh sebagai shell login, sehingga skrip profil tidak dieksekusi. (Beberapa versi rshd
memiliki opsi untuk menjalankan shell jauh sebagai shell login.) Ssh menyalin perilaku ini untuk menjadi pengganti drop-in untuk rsh.
Jika Anda ingin skrip profil Anda dieksekusi, Anda dapat menjalankannya secara eksplisit.
ssh 127.0.0.1 '. /etc/profile; . ~/.profile; ydisplay'
Perhatikan perintah .
untuk memuat skrip profil di dalam shell: mereka adalah perintah yang akan dieksekusi di dalam shell itu, bukan program eksternal.
Jika Anda ingin mengatur variabel lingkungan secara global untuk semua pengguna, ada metode lain pada banyak sistem: alih-alih mendefinisikannya /etc/profile
, tentukan dalam /etc/environment
. File ini dibaca melaluipam_env
modul; kebanyakan distribusi Linux diatur untuk membacanya.
Jika shell login Anda adalah bash, ada kemungkinan lebih lanjut. Biasanya, Anda tidak boleh mengatur variabel lingkungan di.bashrc
(karena mereka tidak akan diatur dalam sesi X kecuali jika Anda pergi melalui terminal dengan shell interaktif, karena mereka tidak akan diatur jika Anda masuk secara interaktif pada konsol teks atau lebih ssh, karena mereka akan mengesampingkan pengaturan khusus jika Anda menjalankan shell di dalam program lain). Namun, bash memiliki fitur aneh yang tidak pernah saya mengerti: bash dibaca ~/.bashrc
dalam dua keadaan yang tidak terkait:
- di shell interaktif yang bukan shell login;
- di shell non-interaktif yang bukan shell login, jika bash mengira itu telah dipanggil oleh
rshd
atau sshd
.
Ketika Anda menjalankan perintah di atas ssh, Anda berada dalam kasus kedua. Anda dapat mengatur agar profil Anda dibaca dengan membaca /etc/profile
dan .profile
dari .bashrc
. Sertakan kode berikut dalam ~/.bashrc
:
case $- in
*i*) :;; # this is an interactive shell, fine
*) # This is not an interactive shell! This must be a non-interactive remote shell session.
. /etc/profile; . ~/.profile
return;;
esac
ydisplay
pekerjaan? apakahssh 127.0.0.1 /usr/app/cpn/bin/ydisplay
bekerja?