Saya mencari tempat di mana variabel lingkungan $ HOME diatur. Itu setelah login, menurut saya.
Saya menggunakan Linux debian 2.6.32-5-686.
linux
environment-variables
webnoon
sumber
sumber
$HOME
dengan$PATH
. Tidak masuk akal untuk memiliki beberapa jalur$HOME
(seluruh nilai akan diperlakukan sebagai satu pathname) atau, dalam banyak kasus, untuk memodifikasi$HOME
sama sekali.Di Linux,
HOME
variabel lingkungan diatur oleh program login:login
pada sesi konsol, telnet dan rloginsshd
untuk koneksi SSHgdm
,kdm
atauxdm
untuk sesi grafis.sumber
Program login mengaturnya sebelum memanggil exec pada shell Anda (dengan memasukkannya ke dalam argumen untuk exec), berdasarkan nilai pada / etc / passwd.
sumber
Menyunting ini dengan menjalankan:
usermod -d /home/whatever_dir whatever_user
.Harap dicatat bahwa ini akan (jelas) menjadi direktori home baru. Bash akan
cd
melakukannya saat login, jadi pastikan itu ada dan izin sudah benar. Selain itu, jangan lupa tentang.bashrc
,.profile
,.xinitrc
, dll; jika mereka tidak ada di direktori home, mereka tidak akan dibaca.Dari
usermod
:sumber
Saya melakukan beberapa penggalian, dan jawabannya cukup mengejutkan. Ambil skrip tes berikut dan
chmod +x
:Kita dapat menjalankannya dengan
./test.sh
dan melihat:Mari kita mengintip di bawah tenda dengan strace.
$ strace ./test.sh |& grep '^open[a-z]*'
Saya tidak melihat penyebutan HOME, file rc, atau passwd. Mari kita coba dengan env bersih:
Tidak ada, seperti yang diharapkan. Mari kita jalankan skrip di env kosong.
Menarik, skripnya bisa pulang. Sekarang mari kita telusuri.
Sekarang kita melihat:
Saya sudah berani garis yang menarik. Seperti yang dapat kita lihat, akan terlihat bahwa ketika
$HOME
tidak ditentukan, shell akan mencoba mengisinya, bahkan ketika tidak dalam mode login atau interaktif.sumber