Der Teil, der in Ihrem Skript eindeutig falsch ist, ist, dass es die Zeilen erwartet, die auf su - postgres
folgen als Postgres-Benutzer ausgeführt werden. Das wird nicht passieren.
Im Stapelmodus su - postgres
startet und wird sofort beendet, da ihm kein Befehl zugeführt wird. Dann werden die nächsten Befehle des Skripts als der Benutzer ausgeführt, der das Skript startet (vermutlich root), und sie schlagen fehl.
Stattdessen sollten Sie so etwas schreiben:
su - postgres <<-'EOF'
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
/usr/local/pgsql/bin/createdb test
EOF
# the lines after the EOF will be executed again as the initial user
Die Vorschläge in den Kommentaren gehen davon aus, dass Sie postgresql über ein Paket installiert haben, aber das ist nicht der Kontext der Frage. Wenn Sie von der Quelle mit ./configure
installieren ohne Argumente und make install
, wird es niemals etwas außerhalb von /usr/local/pgsql
installieren . Es ist vollkommen normal, kein Startskript unter /etc
zu haben in diesem Zusammenhang.