Bash脚本:从shell脚本登录到postgres主页

Bash脚本:从shell脚本登录到postgres主页,bash,postgresql,shell,Bash,Postgresql,Shell,我必须从我的postgres数据库中转储数据 如何登录博士后之家。我有以下脚本,但不起作用: #!/bin/sh$ export PASSWORD= something echo $PASSWORD | sudo -S su postgres

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

如何登录博士后之家。我有以下脚本,但不起作用:

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

但是,当我运行此脚本时,我不会登录到
postgres@gauss:$
同时,脚本不会抛出错误。我有什么地方做错了吗

您不能通过管道将密码发送到
sudo
命令,但可以允许在
/etc/sudoers
中运行某些没有密码的命令(请检查确切语法!)


脚本失败的原因是

 echo $PASSWORD | sudo -S su postgres
使
su
分叉一个下级外壳。该shell尝试从标准输入中读取,该输入在读取密码时已被
sudo-S
耗尽。当shell找不到更多的输入(EOF)时,它将退出。然后,脚本的下一行执行时就好像引用的那行从未发生过一样,因此在UID下运行

看看有没有更好的方法来做你想做的事


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

您的密码后面是换行符吗?
=
之后是否真的有空格作为您的密码?“-S(stdin)选项使sudo从标准输入而不是终端设备读取密码。密码后面必须是换行符。”但这不是实际的缺陷。然而,修改sudoers比在脚本中插入密码要好得多。我也没有这样做,所以我查了一下。这可能是个坏主意(我想不出一个用例是不安全的),这就是为什么你和我都认为它没有退出的原因。
 echo $PASSWORD | sudo -S su postgres