Search code examples
linuxbashvariablesscopesu

Accessing variables from another user scope in Bash


I'm having trouble with the following bash script:

#!/bin/bash

myPassword="foobar"

su - postgres <<-'EOF'
    echo $myPassword # nil
EOF

echo $myPassword # foobar

How can I access or pipe the contents of $myPassword from within the postgres user session?

Tried it with and without export with not luck.


Solution

  • You're using 'EOF' for the heredoc marker. So no substitution happens. Remove the quotes around that if you want variable substitution inside the block. See Heredocs And Herestrings.

    You could also keep what you have, but use the -p (or -m or --preserve-environment) option of su which might work better for you.

    (I'm sure there's no need to remind you that keeping passwords in scripts is unsafe. And a process's environment can be inspected with sufficient privileges, so it's not a great place for passwords either.)