Home > Mobile >  Why doesn't the ENV file get sourced by bash or sh?
Why doesn't the ENV file get sourced by bash or sh?

Time:12-03

I'm using Zsh. Here is the ENV file:

the ENV file

and my .bash_profile:

my .bash_profile

, each with one echo command for debug. When I start a new shell process sh,

it runs as child shell, and there's no debug output. If I change to bash,

I get the same result, still no debug output.

I investigated from

Surely, if I login with bash

chsh -s /bin/bash

, the ~/.bash_profile would get sourced

and the ENV variable get set and exported as expected. However, Why doesn't the ENV file, namely ~/.bashenv, get sourced by bash or sh?

CodePudding user response:

I learned something could explain my issue when reading:

For Bash users, the ENV file is read only when Bash is invoked with the name sh, with the --posix command-line option, or after set –o posix is executed (all of which force POSIX standard compliance).

Since variable ENV has been exported to subshells, sh would try to source the ENV file, because this time I use the name sh:

So, here's the key point to fix this:

  1. We should use the name sh to invoke bash.

  2. ENV variable should be set and accessible first.

  • Related