login(1)
tradicionalmente define um conjunto limitado de variáveis de ambiente em, bem, o tempo de login. Como su
login
normalmente solicitará uma senha, mesmo que uma delas faça login como se, de modo que provavelmente não seja o ideal. Os sistemas Unix podem ter complicações adicionais ou diferentes, e. se houver PAM pam_env(8)
poderia adicionar ou remover variáveis de ambiente do que foi definido por login
. Uma cópia de qual login(1)
poderia, assim, criar um conjunto de variáveis de ambiente diferente do que um login real através de conjuntos de PAM.
Depois, há terminais e shells; terminais podem ou não iniciar o processo subsequente como um shell de "login". Os shells podem ler arquivos diferentes quando sinalizados como login e podem acabar com diferentes variáveis env para instâncias de login versus não-login. Existe literatura sobre esse assunto .
Portanto, com base no unix, no processo de login, na configuração do sistema local, no shell usado pelo usuário e na configuração local desse shell, pode haver diferentes variáveis de ambiente definidas "por padrão".
Você pode conseguir uma lista adequada de variáveis de ambiente com uma instância de shell de login:
% export CANARY=tweet
% env -i bash -l -c 'env | grep CANARY'
/Users/jhqdoe/.profile: line 6: set: markdirs: invalid option name
%
isso limpa as variáveis de ambiente do processo pai ( env | grep CANARY
seria onde o $COMMAND
seria). .profile
aqui é, na verdade, para mksh
, não bash
. No entanto, o acima pode não definir as variáveis necessárias que o fluxo de trabalho de login define, pois ele não passa por esse código. Eles podem ser inspecionados para ver o que estão com um novo login e, em seguida, executar:
$ env > def
$ env -i bash -l -c 'env > new'
E, em seguida, comparar os arquivos def
e new
para ver como eles diferem (possivelmente envolvendo os comandos sort
e diff
), possivelmente atualizando o comando env
para definir os itens que foram perdidos antes então fazendo o shell de login.
Outra ideia é tirar um instantâneo do ambiente e usá-lo como padrão.