0

debian 6.0サーバーをデプロイするときに実行されるbashシェルデプロイメントスクリプト(linode stackscript)があります。スクリプトはrootとして実行され、スクリプトは次のとおりです。

apt-get update
apt-get install postgresql postgresql-contrib pgadmin3

passwd postgres
su - postgres
psql -c "ALTER USER postgres WITH PASSWORD 'changeme'" -d template1
su - postgres
createdb mytestdb
psql mytestdb

私には2つの問題があります:

まず、シェルを介して各行を手動で実行すると機能しますが、stackscriptとして実行すると、行passwd postgresが実行されますが、その後は何も実行されません。

次に、line passwd postgresを実行すると、パスワードを手動で入力するように求められます。シェルスクリプトに変数として入れる方法はありますか?

4

1 に答える 1

2

passwdインタラクティブに使用することを目的としています。バッチでパスワードを変更するための適切なコマンドはですchpasswd

例:

#!/bin/sh
echo 'postgres:newpassword' | chpasswd

su - postgresまた、スクリプトの動作は、通常は非対話型モードで実行されているようには見えないことに注意してください。より良いこと:su -c 'command1; command2...' - postgres

于 2012-12-06T15:49:15.483 に答える