我在使用以下bash脚本时遇到问题:
#!/bin/bash
myPassword="foobar"
su - postgres <<-'EOF'
echo $myPassword # nil
EOF
echo $myPassword # foobar
如何在$myPassword
用户会话中访问或管道postgres
的内容?
在没有export
但没有运气的情况下尝试使用它。
答案 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"