変数を読み取るためにエイリアスを設定してから、2番目のコマンドでそれを使用することは、手動で実行した場合にのみ機能します。

変数を読み取るためにエイリアスを設定してから、2番目のコマンドでそれを使用することは、手動で実行した場合にのみ機能します。

私は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 jfpsI を使用する場合は、echo $db2 番目のデータベースの名前です。

なぜ?

ベストアンサー1

"..."二重引用符()を使用するので、$dbエイリアスを使用するのではなく、エイリアスを定義するときに変数が拡張されます。この試み:

alias psql-local='read -p "PSQL: enter the DB to connect: " db ; sudo -i -u postgres psql --dbname "$db"'

おすすめ記事