在Shell脚本中通过SSH远程执行psql查询遇阻求助
解决远程执行PostgreSQL查询的引号传递问题
嘿,我来帮你搞定这个引号嵌套的麻烦!你的原命令里因为引号混用,导致SQL查询语句没能被正确传递到远程主机,这是shell脚本里很常见的小坑,我给你几个实用的解决方案:
方案1:用单引号包裹echo内容
把echo的整个内容用单引号括起来,这样里面的双引号就会被当作纯字符串,不会被本地shell解析转义,能完整传到远程主机:
$(echo 'psql -U postgres -d mydb -c "SELECT * FROM table_name;"' | ssh $REMOTE_IP)
方案2:直接通过ssh传递命令(更简洁)
其实根本不需要echo,ssh本身就支持直接执行远程命令,把要执行的完整命令用单引号包起来就行,这样本地shell不会解析里面的内容,直接传给远程执行:
ssh $REMOTE_IP 'psql -U postgres -d mydb -c "SELECT * FROM table_name;"'
方案3:用Here Document处理复杂场景
如果你的SQL查询里包含单引号,或者是多行命令,用Here Document会更省心,避免各种转义问题:
ssh $REMOTE_IP <<EOF psql -U postgres -d mydb -c "SELECT * FROM table_name;" EOF
额外注意事项
- 确保
$REMOTE_IP变量已经正确设置为目标主机的IP或主机名 - 远程主机需要支持ssh登录,并且你有权限(如果没配置免密登录,执行时会提示输入密码)
- 确认远程的postgres用户有权限访问
mydb数据库和table_name表
内容的提问来源于stack exchange,提问作者Pedro Osório
相关产品推荐
相关产品推荐

