0

我必须从我的 postgres 数据库中进行数据转储。

我如何登录到 postgres 主页?. 我有以下脚本,但它不起作用:

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

但是,当我运行此脚本时,我不会postgres@gauss:$同时登录到脚本不会引发错误。我在这里做错了什么吗?

4

2 回答 2

2

您的脚本失败的原因是该行

 echo $PASSWORD | sudo -S su postgres

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

请参阅j.hloetzek 的答案,以更好地做你想做的事。

粘贴的脚本也有两个语法错误,但无论如何您都不应该使用这种方法。

于 2013-05-26T20:02:35.623 回答
0

您不能通过管道将密码传递给sudo命令,但可以允许在/etc/sudoers没有密码的情况下运行某些命令(检查确切的语法!)

username YOURUSERNAME = NOPASSWD: /sbin/su postgres
于 2013-05-26T16:26:04.110 回答