25

この方法で postgresql ユーザーのパスワードを変更できます (2 ステップ):

$ su - postgres -c 'psql -U postgres -d postgres'
# Alter user postgres with password 'password';

ここで、次のようなパスワードを変更するために、単一行コマンド (1 ステップ) を使用したいと考えています。

su - postgres -c 'psql -U postgres -d postgres -c "alter user postgres with password ''password'';"'

二重引用符を使用して単一引用符をエスケープすると聞いたので、二重引用符を追加しまし'た。ただし、エラーメッセージが表示されます:

ERROR:  syntax error at or near "password"
LINE 1: alter user postgres with password password;

これを行うために 1 行のコマンドを使用する方法を教えてもらえますか?

4

1 に答える 1

50

使用すると簡単ですsudo

sudo -u postgres psql -U postgres -d postgres -c "alter user postgres with password 'password';"

ただし、suでも可能です。これは機能するはずです:

su - postgres -c "psql -U postgres -d postgres -c \"alter user postgres with password 'password';\""

外側の二重引用符を使用し、内側の二重引用符をエスケープして、単一の呼び出し引数の一部としてパススルーしsu、シェルによってエスケープされないようにして、実際のクエリ テキストが単一の引数として単一引用符で囲まれたパスワードを含む psql に渡されるようにしました.

これが sudo の方が簡単な理由の 1 つは、サブプロセスを実行するために 2 番目のシェル インスタンスを実行する代わりに、よりスマートな方法でサブプロセスを実行することです。シェル メタキャラクタ エスケープのレイヤーを 1 つ減らす必要があります。

于 2013-04-17T04:17:39.253 に答える