Bagian yang jelas salah dalam skrip Anda adalah skrip mengharapkan baris mengikuti su - postgres
untuk dijalankan sebagai pengguna postgres. Ini tidak akan terjadi.
Dalam mode batch, su - postgres
dimulai dan segera keluar karena tidak ada perintah yang dimasukkan ke dalamnya. Kemudian perintah skrip berikutnya dijalankan saat pengguna meluncurkan skrip (mungkin root) dan gagal.
Sebaliknya, Anda harus menulis sesuatu seperti ini:
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
Saran di komentar mengasumsikan bahwa Anda telah menginstal postgresql melalui sebuah paket, tetapi itu bukan konteks pertanyaannya. Saat Anda menginstal dari sumber dengan ./configure
tanpa argumen dan make install
, itu tidak akan pernah menginstal apa pun di luar /usr/local/pgsql
. Sangat normal untuk tidak memiliki skrip startup di bawah /etc
dalam konteks ini.