2013-05-26 76 views
0

我必须从我的postgres数据库中获取数据转储。bash脚本:从shell脚本登录到postgres home

如何登录到postgres主页? 。我有以下的脚本,但它不工作:

#!/bin/sh$                  
export PASSWORD= something              
echo $PASSWORD | sudo -S su postgres                             
pg_dump somedb > dump.txt+`date +%Y-%m-%d`   

然而,当我运行此脚本,我没有得到记录到[email protected]:$同时脚本不会引发错误。有什么我在这里做错了吗?

+0

你的密码后跟一个换行符char? – demure

+0

'''你的密码后面真的有空格吗? – Kevin

回答

2

脚本失败的原因是该行

echo $PASSWORD | sudo -S su postgres 

导致su分叉从属shell。该shell试图从读取密码中已经用尽的标准输入中读取sudo -S。当shell找不到更多输入(EOF)时,它将退出。然后执行脚本的下一行,就好像引用的行从未发生过一样,因此会在您的UID下运行。

请参阅j.hloetzek's answer为更好的方式做你想做的事情。

此外,粘贴的脚本在其中有两个语法错误,但不管怎样,您都不应该使用该方法。

0

你不能管密码的sudo命令,但可以允许/etc/sudoers某些命令不使用密码来运行(查看准确的语法!)

username YOURUSERNAME = NOPASSWD: /sbin/su postgres 
+0

“-S(stdin)选项会导致sudo从标准输入中读取密码,而不是终端设备。密码必须后跟一个换行符。”但这不是实际的缺陷。然而,修改'sudoers'比在脚本中添加密码好得多。 – msw

+0

@msw:好的,谢谢我不知道'-S'! –

+0

我也没有看到它。这可能是一个坏主意(我想不出一个不安全的用例),这就是为什么你和我都认为它没有退出。 – msw