user1325378
user1325378

Reputation: 89

call a shell script from another shell script via sudo - environment variables?

I'm calling bash script B from script A. In script A (parent script) I am exporting some variables. I would like to use these variables in script B (subscript), but the variable values are not being passed on from script A to script B. Is there a way to access the variable values from script B?

#!/bin/bash
# script_A.sh
export VAR="value"
enter code here
sudo -u user ./script_B.sh

#!/bin/bash
# script_B.sh
echo $VAR    # this prints nothing

Upvotes: 4

Views: 2260

Answers (3)

l0b0
l0b0

Reputation: 58838

If you want to keep only a specific set of variables (rather than all of them) for reasons of security or simplicity, you can simply assign them as part of the sudo command:

$ cat test.sh 
#!/usr/bin/env bash
echo "$foo"
$ unset foo
$ foo=bar ./test.sh
bar
$ sudo foo=bar ./test.sh
bar

Upvotes: 0

c00kiemon5ter
c00kiemon5ter

Reputation: 17634

As @geekosaur mentioned, sudo resets the environment for security reasons. To preserve the environment pass -E switch to sudo.

from the sudo manpage:

-E

The -E (preserve environment) option indicates to the security policy that the user wishes to preserve their existing environment variables. The security policy may return an error if the -E option is specified and the user does not have permission to preserve the environment.

Upvotes: 9

geekosaur
geekosaur

Reputation: 61389

The problem here is not with the shell script, but that for security reasons sudo sanitizes the environment it passes to the program it runs. See man sudoers for details, and /etc/sudoers on your system for what (if any) environment variables it will preserve.

Upvotes: 3

Related Questions