使用gcloud认证登录Postgres psql在zsh中报错,求正确语法
在Zsh中正确执行PostgreSQL登录命令的解决方法
问题描述
在Bash中可正常运行的命令:
PGPASSWORD=$(gcloud sql generate-login-token) psql -h xx.xxx.xx.xxx -U user@domain.com --no-password dbname
在Zsh中执行时出现错误:
zsh: parse error near `time'
解决方法
Zsh不支持VAR=$(command) command这种临时环境变量绑定的语法(Bash支持该前置变量赋值方式),可改用以下两种方式之一:
方式一:用env命令显式设置环境变量
env PGPASSWORD=$(gcloud sql generate-login-token) psql -h xx.xxx.xx.xxx -U user@domain.com --no-password dbname
方式二:使用Zsh子shell环境赋值
(export PGPASSWORD=$(gcloud sql generate-login-token); psql -h xx.xxx.xx.xxx -U user@domain.com --no-password dbname)
原因说明
Bash允许在命令前直接前置环境变量赋值,仅对当前命令生效;但Zsh的语法解析规则不同,这种写法会被误解析导致语法错误。使用env命令或子shell内导出变量的方式,可在Zsh中实现临时给单个命令设置环境变量的效果。
内容的提问来源于stack exchange,提问作者Wells
相关产品推荐
相关产品推荐

