Estou com o CentOS 7 e quero vincular um alias para iniciar o shell do PostgreSQL (psql). Eu defini esse alias e o anexei em /etc/profile.d/alias
:
alias psql-local="read -p \"PSQL: enter the DB to connect: \" db ; sudo -i -u postgres psql --dbname $db"
É executável por root
.
E, eu faço login como root
e executo alias
, recebo:
alias psql-local='read -p "PSQL: enter the DB to connect: " db ; sudo -i -u postgres psql --dbname '
Observe aqui $db
no final está vazio.
Então eu corro psql-local
, mas recebo erro:
[root@lucas_vm ~]
> psql-local
PSQL: enter the DB to connect: jfps
psql: option '--dbname' requires an argument
Try "psql --help" for more information.
Então eu entro /etc/profile.d/
e executo alias.sh
manualmente, então de repente eu posso usar este alias:
[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=#
Se eu sair psql
e executar alias
novamente, vejo esta linha alterada:
alias psql-local='read -p "PSQL: enter the DB to connect: " db ; sudo -i -u postgres psql --dbname jfps'
A nota $db
é alterada para jfps
.
Então, tento acessar outro banco de dados, e ele funciona novamente.
Mas, quando saio e alias
, vejo o --dbname jfps
, não o nome do segundo banco de dados. Quando I echo $db
, em vez disso, é o nome do segundo banco de dados.
Por quê?
Como você está usando aspas duplas (
"..."
), a$db
variável será expandida quando você definir o alias, não quando for usado. Tente isso em vez disso: