編集どうやら、問題は、コマンド (以下) が の影響を受けないため、コマンドを下にリストしようとするのではなく
su - postgres -c "commands, commands, commands"、
に渡す必要があったことです。/編集susususu
編集 2:さらに優れたソリューションについては、David Braun の回答を参照してください: https://stackoverflow.com/a/22947716/694469
su - postgresVagrant ブートストラップ シェル プロビジョニング スクリプトでユーザー ( ) を切り替えることはできませんか? (なぜだめですか?)
そんな脚本を書いています。そのスクリプトでは、次のことを行います。
echo '===== Creating PostgreSQL databases and users'
su - postgres
psql -c "
create user SomeUserName password '...';
alter user ...;
"
ここでは、 psqluser としてログインを試みる必要がありますpostgres。ただし、これはsu - postgres明らかに失敗し、シェルはユーザーrootとしてログインしようとします。(明らかに、rootは Vagrant ブートストラップ シェル スクリプトを実行するユーザーです。)
したがって、このエラーが表示され、psql コマンドは呼び出されません。
psql: FATAL: ロール "root" が存在しません
に置き換えsu - postgresても効果はありません(スクリプトはすでにrootsudo su - postgresとして実行されていると思います。)
idの前後に (現在のユーザー ID を出力する)を追加し、呼び出された前後の両方su - postgresをid出力します。私が知る限り、無視されていますか?そして、後でルートユーザーに戻ろうとすると、ブートストラップスクリプトが完全に終了します:-(uid=0(root) gid=0(root) groups=0(root)susu - postgresexit
でも。を実行した後、問題なく起動vagrant sshできるようになりました。ただし、プロビジョニング スクリプト内からではありません。sudo su - postgrespsql
(回避策は、(ユーザーをpostgresに切り替える代わりに)-h 127.0.0.1 --username postgresいつ呼び出すかを指定することです。また、VM ローカル接続に対して PostgreSQL 信頼ベースの認証を有効にします。)psql