Я ищу место, где установлена переменная окружения $ HOME. Это после входа в систему, на мой взгляд.
Я использую Linux Debian 2.6.32-5-686.
linux
environment-variables
webnoon
источник
источник
$HOME
с$PATH
. Не имеет смысла иметь несколько путей$HOME
(все значение будет обрабатываться как одно имя пути) или, в большинстве случаев, изменять$HOME
вообще.В Linux
HOME
переменная окружения устанавливается программой входа в систему:login
на консоли, телнет и RLogin сессийsshd
для соединений SSHgdm
,kdm
илиxdm
для графических сеансов.источник
Программа входа в систему организует его перед вызовом exec в вашей оболочке (включив его в аргументы exec), основываясь на значении в / etc / passwd.
источник
Редактировать это, запустив:
usermod -d /home/whatever_dir whatever_user
.Обратите внимание, что это (очевидно) будет новый домашний каталог. Bash сделает
cd
это при входе в систему, поэтому убедитесь, что он существует и права доступа правильные. Кроме того, не стоит забывать о том.bashrc
,.profile
,.xinitrc
и т.д.; если они не находятся в домашнем каталоге, они не будут прочитаны.От
usermod
:источник
Я немного покопался, и ответ на это немного удивляет. Возьмите следующий тестовый скрипт и
chmod +x
его:Мы можем запустить его
./test.sh
и увидеть:Давайте заглянем под капюшон со стразами.
$ strace ./test.sh |& grep '^open[a-z]*'
Я не вижу упоминаний о HOME, файлах rc или passwd. Давайте попробуем это с чистым env:
Ничего, как и ожидалось. Давайте запустим скрипт в пустом env.
Интересно, что сценарий способен добраться до дома. Теперь давайте проследим.
Теперь мы видим:
Я выделил интересные строки. Как мы видим, может показаться, что когда
$HOME
не определено, оболочка будет пытаться заполнить его, даже когда не в логине или интерактивном режиме.источник