As variáveis de ambiente exportadas são herdadas do processo pai para o filho. Então, a menos que você tenha executado seu script em um contexto que realmente remova variáveis de ambiente (como via sudo
, com a opção env_reset em vigor), você provavelmente obterá algumas variáveis do processo pai.
A lista de variáveis de ambiente básicas do Sudo está documentada em sudoers(5)
da seguinte forma:
By default, the env_reset option is enabled. This causes commands to be executed with a new, minimal environment. On AIX (and Linux systems without PAM), the environment is initialized with the contents of the /etc/environment file. The new environment contains the TERM, PATH, HOME, MAIL, SHELL, LOGNAME, USER, USERNAME and SUDO_* variables in addition to variables from the invoking process permitted by the env_check and env_keep options. This is effectively a whitelist for environment variables.
A propósito, através do sistema de arquivos / proc, você pode dar uma olhada no ambiente de qualquer processo que você possui - ou se você é root, qualquer processo no sistema.
Por exemplo, se você quiser saber quais variáveis o processo de inicialização (processo # 1) tem, você pode se tornar root e fazer isso:
# strings /proc/1/environ
selinux=0
SHLVL=1
HOME=/
init=/sbin/init
TERM=linux
drop_caps=
BOOT_IMAGE=/vmlinuz-4.9.61-atom
PATH=/sbin:/usr/sbin:/bin:/usr/bin
crashkernel=384M-:128M
PWD=/
rootmnt=/root
(Este exemplo foi de um sistema Debian 9 com um kernel personalizado.)
Portanto, existem alguns fundamentos, provavelmente fornecidos pelo initramfs ou pelo próprio kernel, como SHLVL, HOME, TERM, PATH e PWD. Existem também algumas variáveis relacionadas ao processo de inicialização e aos vários recursos de segurança opcionais.