我使用 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
,它是第二个数据库的名称。
为什么?
因为您使用的是双引号 (
"..."
),所以$db
变量将在您定义别名时展开,而不是在使用时展开。试试这个: