login(1)
традиционно устанавливает ограниченный набор переменных среды во время входа в систему. Likesu
login
обычно запрашивает пароль, даже если кто-то входит в систему под своим именем, так что это, вероятно, не идеально. Системы Unix могут иметь дополнительные или другие сложности, например. если есть PAM pam_env(8)
, можно было бы добавить или удалить переменные среды из того, что было установлено login
. Таким образом, копия того, что делает login(1)
, может создать набор переменных среды, отличный от фактического входа в систему через наборы PAM.
Далее идут терминалы и оболочки; терминалы могут запускать или не запускать последующий процесс как оболочку входа в систему. Оболочки могут читать разные файлы, когда они помечены как вход в систему, и могут иметь разные переменные env для входа в систему по сравнению с экземплярами входа без -. На эту тему имеется литература .
Таким образом, в зависимости от Unix, процесса входа в систему, конфигурации локальной системы, используемой пользователем оболочки и локальной конфигурации для этой оболочки могут быть разные переменные среды, установленные «по умолчанию».
Вы можете получить подходящий список переменных среды с экземпляром оболочки входа в систему:
% export CANARY=tweet
% env -i bash -l -c 'env | grep CANARY'
/Users/jhqdoe/.profile: line 6: set: markdirs: invalid option name
%
это очищает переменные окружения от родительского процесса(env | grep CANARY
будет там, где ваш $COMMAND
будет ). .profile
здесь на самом деле для mksh
, а не bash
. Однако приведенное выше может не устанавливать необходимые переменные, которые устанавливает рабочий процесс входа в систему, поскольку он не проходит через этот код. Их можно проверить, чтобы узнать, что они представляют собой с новым входом в систему, а затем запустить:
$ env > def
$ env -i bash -l -c 'env > new'
А затем сравнить файлы def
и new
, чтобы увидеть, чем они отличаются (, возможно, используя команды sort
и diff
), а затем, возможно, обновить команду env
, чтобы установить вещи которые пропущены до выполнения оболочки входа в систему.
Другая идея состоит в том, чтобы сделать снимок среды и использовать его по умолчанию.
octave-octcdf
больше не доступен,octave-netcdf
заменяет его:используйте
sudo apt install octave-netcdf
вместо этого.