
私はCentOS 7を使用しており、PostgreSQLシェル(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
。
また、asとしてログインして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
。
その後、別のデータベースにアクセスしようとすると再び機能します。
ただし、終了すると、2番目のデータベースの名前の代わりにalias
その内容が表示されます。--dbname jfps
I を使用する場合は、echo $db
2 番目のデータベースの名前です。
なぜ?
答え1
"..."
二重引用符()を使用するので、$db
エイリアスを使用するのではなく、エイリアスを定義するときに変数が拡張されます。この試み:
alias psql-local='read -p "PSQL: enter the DB to connect: " db ; sudo -i -u postgres psql --dbname "$db"'