Na verdade (verificação rápida) su
(de um usuário não privilegiado para outro usuário não privilegiado) no Solaris não modifica $HOME
. Talvez você estivesse root ao emitir o comando su
.
A página de manual do Solaris é omissa sobre o assunto, mas é um problema conhecido, citando um comentário do grupo de notícias :
nails September 16, 2008 at 18:16:45
jefro:
Sorry I must disagree wtih you. At least in Solaris su <user id>
doesn't change the user environment - including environmental
variables. To change the environment, you must execute
su - <user id>
According to the su MAN page:
If the first argument to su is a dash (-), the environment will
be changed to what would be expected if the user actually logged
in as the specified user.
No entanto, a página de manual diz coisas sobre várias variáveis, mas não HOME
:
o In addition to what is already propagated, the LC* and
LANG environment variables from the specified user's
environment are also propagated.
o Propagate TZ from the user's environment. If TZ is not
found in the user's environment, su uses the TZ value
from the TIMEZONE parameter found in
/etc/default/login.
o Set MAIL to /var/mail/new_user.
If the first argument to su is a dash (-), the environment
will be changed to what would be expected if the user actu-
ally logged in as the specified user. Otherwise, the
environment is passed along, with the exception of $PATH,
which is controlled by PATH and SUPATH in /etc/default/su.
Essa última sentença pode ser interpretada para dizer que a variável HOME
do usuário atual é passada sem alteração (a menos que você use o formulário " su -
", é claro).
Outros sistemas:
- A página de manual do AIX é menos útil , mas como o recurso é muito antigo em ambos, o comportamento pode ser baseado no mesmo código-fonte. A página de manual também não é útil, dizendo que as variáveis de ambiente
HOME
e ENV
definidas são removidas .
Como su
não está fornecendo as informações necessárias, uma abordagem diferente ajudaria. Se todas as suas contas forem contas locais (sem LDAP), você poderá pesquisar sempre /etc/passwd
, por exemplo,
THATHOME=$( awk -F: '$1 ~ /^'$THATUSER'$/ {print $6;}' </etc/passwd )
Notas:
- o formato de
/etc/passwd
é o mesmo em todos os sistemas semelhantes ao Unix. - usar
awk
para dividir o campo em campos evita o problema com um grep pegando a linha errada (ou linhas), por exemplo, se você tivesse uma contaoracleadmin
. - Se você tivesse o LDAP, poderá ter o utilitário
getent
, o que permitiria a referência a usuários não locais.