編集どうやら、問題は、私は
su - postgres -c "commands, commands, commands"
を行っている必要があることだった、
(su
以下)これらのコマンドが影響を受けないので、むしろsu
の下にそれらを一覧表示しようとするよりも、su
に任意のコマンドを渡され su
によって。 /編集Vagrantブートストラップシェルスクリプトでユーザーを切り替えることはできますか?
編集2:https://stackoverflow.com/a/22947716/694469
私はベイグラントブートストラップシェルプロビジョニングスクリプトでユーザー(su - postgres
)を切り替えることができません。でも、よりよい解決策を参照してくださいデビッド・ブラウンの答えは? (どうしてですか?)
私はそのようなスクリプトを書いています。そのスクリプトでは、私が行います
ここecho '===== Creating PostgreSQL databases and users'
su - postgres
psql -c "
create user SomeUserName password '...';
alter user ...;
"
、psql
はユーザーpostgres
としてログインしようとしなければなりません。しかし、su - postgres
は明らかに失敗し、シェルはユーザとしてルートとしてログインを試みます。 (どうやら、ルートはベイグラントブートストラップシェルスクリプトを実行するユーザーです。)
だから、このエラーが表示されるとpsqlコマンドが呼び出されていません。sudo su - postgres
とsu - postgres
の交換
psql: FATAL: role "root" does not exist
は、(効果がありません私は、スクリプトがすでにルートとして実行していると思います。)
私はsu - postgres
前後のid
(現在のユーザーIDを印刷している)、およびを追加しました10は、su
の前後両方にuid=0(root) gid=0(root) groups=0(root)
を印刷しました。だから私が言うことができる限り、su - postgres
は無視されていますか?そして、後に、私はルートユーザーに切り替えるしようとしたときに、exit
特定のは、vagrant ssh
を行った後、私がすることができるよ。
しかし完全:-(ブートストラップスクリプトを終了しsudo su - postgres
うまく、次に起動。しかし、ないプロビジョニングスクリプト内からpsql
。
(回避策は、私が代わりにpostgresの)にユーザーを切り替えるの(psql
を呼び出すとき-h 127.0.0.1 --username postgres
を指定する。そしてまた、VMローカル接続のためのPostgreSQLの信頼ベースの認証を有効にすることです。)
Re:「ユーザーの入力が必要な場合があります」 - それでは、私は考えなかった。ですから 'su - オプション'として '--command COMMAND'を指定してしまえば、最終的にはすべてが動作するかもしれません。私はそれをすべて説明していると思います。問題は、バージンに関連するものではなく、バッシュにあまり慣れていないということでした。 (?) – KajMagnus
'--username'の提案に感謝します。 (私はその問題の最後に「回避策は '-h 127.0.0.1 --username postgres'を指定することです。) – KajMagnus
ええ、申し訳ありませんが、答えにあまりにも迅速にhehe ... –