Częścią, która jest wyraźnie nieprawidłowa w twoim skrypcie, jest to, że oczekuje on linii następujących po su - postgres
do uruchomienia jako użytkownik postgres. To się nie stanie.
W trybie wsadowym su - postgres
uruchamia się i natychmiast wychodzi, ponieważ nie jest do niego podawane żadne polecenie. Następnie kolejne polecenia skryptów są wykonywane jako użytkownik uruchamiający skrypt (prawdopodobnie root) i kończą się niepowodzeniem.
Zamiast tego powinieneś napisać coś takiego:
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
Sugestie w komentarzach zakładają, że zainstalowałeś postgresql za pośrednictwem pakietu, ale to nie jest kontekst pytania. Kiedy instalujesz ze źródła za pomocą ./configure
bez argumentów i make install
, nigdy nie zainstaluje niczego poza /usr/local/pgsql
. To zupełnie normalne, że nie ma skryptu startowego w /etc
w tym kontekście.