我使用的是 CentOS 7,我想绑定一个别名来启动 PostgreSQL shell(psql)。我定义了这个别名并将其附加到/etc/profile.d/alias
:
alias psql-local="read -p \"PSQL: enter the DB to connect: \" db ; sudo -i -u postgres psql --dbname $db"
它可以通过 执行root
。
而且,我登录为root
,然后运行alias
,我得到:
alias psql-local='read -p "PSQL: enter the DB to connect: " db ; sudo -i -u postgres psql --dbname '
注意这里$db
最后是空的。
然后我运行psql-local
,但出现错误:
[root@lucas_vm ~]
> psql-local
PSQL: enter the DB to connect: jfps
psql: option '--dbname' requires an argument
Try "psql --help" for more information.
然后我输入/etc/profile.d/
,并alias.sh
手动运行,然后突然我可以使用这个别名:
[root@lucas_vm /etc/profile.d]
> . alias.sh
[root@lucas_vm /etc/profile.d]
> psql-local
PSQL: enter the DB to connect: jfps
psql (10.5)
Type "help" for help.
jfps=#
如果我退出psql
并再次运行alias
,我会看到这一行发生了变化:
alias psql-local='read -p "PSQL: enter the DB to connect: " db ; sudo -i -u postgres psql --dbname jfps'
注$db
改为jfps
.
然后,我尝试访问另一个数据库,它再次工作。
但是,当我退出时alias
,我看到的是--dbname jfps
,而不是第二个数据库的名称。当 I 时echo $db
,它是第二个数据库的名称。
为什么?
答案1
因为您使用双引号 ( "..."
),所以$db
变量将在定义别名时展开,而不是在使用时展开。试试这个:
alias psql-local='read -p "PSQL: enter the DB to connect: " db ; sudo -i -u postgres psql --dbname "$db"'