env command can be used to pass environment variables without setting them on the outer environment (the current shell).
Suppose you want to run a Node.js app and set the
USER variable to it.
You can run
env USER=flavio node app.js
USER environment variable will be accessible from the Node.js app via the Node
You can also run the command clearing all the environment variables already set, using the
env -i node app.js
In this case you will get an error saying
env: node: No such file or directory because the
node command is not reachable, as the
PATH variable used by the shell to look up commands in the common paths is unset.
So you need to pass the full path to the
env -i /usr/local/bin/node app.js
Try with a simple
app.js file with this content:
You will see the output being
You can pass an env variable:
env -i NAME=flavio node app.js
and the output will be
-i option will make
PATH available again inside the program:
env command can also be used to print out all the environment variables, if ran with no options:
it will return a list of the environment variables set, for example:
HOME=/Users/flavio LOGNAME=flavio PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin PWD=/Users/flavio SHELL=/usr/local/bin/fish
You can also make a variable inaccessible inside the program you run, using the
-u option, for example this code removes the
HOME variable from the command environment:
env -u HOME node app.js
env command works on Linux, macOS, WSL, and anywhere you have a UNIX environment
Download my free Linux Commands Handbook!