Tente depurar usando a técnica descrita em minha resposta no superusuário, usando
debug_msg "running ~/.bashrc ($0), PATH = '$PATH'"
e similares para / etc / bashrc, / etc / profile, etc.
Eu entrei no meu servidor Linux (Redhat AS4) por meio do SSH como o usuário 'guest', depois executei o comando echo $PATH
e a saída é /usr/local/bin:/bin:/usr/bin
.
No entanto, quando eu executar o comando su - guest
para alternar para o mesmo usuário, execute o comando echo $PATH
, a saída se tornará /usr/bin:/bin:/usr/local/bin
.
Por que o mesmo usuário tem um valor PATH diferente no servidor Linux? Isso me faz ter diferentes versões do Python e não sei o que causa esse problema.
Tente depurar usando a técnica descrita em minha resposta no superusuário, usando
debug_msg "running ~/.bashrc ($0), PATH = '$PATH'"
e similares para / etc / bashrc, / etc / profile, etc.
Verifique os campos ENV_SUPATH e ENV_PATH em /etc/login.def
Para uma boa prática de script, não confie na variável PATH para executar um comando, pois ele é ambíguo.
Diferentes scripts (fazendo manipulações diferentes no PATH) são originados nos dois casos.
Como você está usando a opção -
, su
deve fornecer seu script de login, enquanto ssh
não deve.
Eu não sei qual comportamento você quer exatamente, mas talvez você possa verificar se algumas opções su (por exemplo, -m, --preserve-environment: não redefine as variáveis de ambiente) poderia ajudar?
São as pessoas assim: -
Em / etc / passwd, onde o ID do usuário é definido, um diretório inicial e um shell padrão:
auser:!:97:51::/home/user:/usr/bin/ksh
Quando um usuário se registra no 'ksh' ou bash ou o que for executado, ele pegará um 'PATH' padrão do arquivo '/ etc / environment' (e alguns shells rodarão um arquivo de inicialização do sistema), mas, ele também executará os comandos de um script inicial no diretório inicial no caso acima do arquivo '.kshrc'.
Assim, o PATH pode ser definido pelo comando inicial, pelas configurações do sistema para o comando inicial e pelos arquivos .rc 'ocultos' no diretório inicial dos usuários.
O 'su -' não executa o mesmo conjunto de comandos iniciais, pois o login apenas seleciona as configurações padrão do arquivo '/ etc / environment'.
da su manpage
su is used to become another user during a login session. Invoked with-
out a username, su defaults to becoming the super user. The optional
argument - may be used to provide an environment similiar to what the
user would expect had the user logged in directly.
portanto, você sempre obterá configurações de env diferentes em "su" e "su -"
Tags su environment-variables linux