在Bash中访问另一个用户范围的变量

时间:2014-05-25 16:01:08

标签: linux bash variables scope su

我在使用以下bash脚本时遇到问题:

#!/bin/bash

myPassword="foobar"

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

echo $myPassword # foobar

如何在$myPassword用户会话中访问或管道postgres的内容?

在没有export但没有运气的情况下尝试使用它。

3 个答案:

答案 0 :(得分:2)

您正在使用'EOF'作为heredoc标记。所以不会发生替代。如果要在块内部进行变量替换,请删除周围的引号。请参阅Heredocs And Herestrings

您也可以保留所拥有的内容,但请使用-p的{​​{1}}(或-m--preserve-environment)选项,这可能对您有用。

(我确信没有必要提醒你在脚本中保存密码是不安全的。并且可以使用足够的权限检查进程的环境,因此它也不是密码的好地方。)

答案 1 :(得分:1)

您可能需要转义\$mypassword,以便在调用su

之前不会在原始脚本中解析它

另外,您可以将-c传递给su,以便将某些内容从环境传递到生成的shell:

user1:~$ X=foo su -c "bash -c \"whoami && echo \$X\"" user2
Password: 
user2
foo

答案 2 :(得分:0)

这个su命令应该有效:

myPassword="foobar"
su postgress -c "echo $myPassword"