आपकी स्क्रिप्ट में जो हिस्सा स्पष्ट रूप से गलत है, वह यह है कि यह su - postgres
के बाद की पंक्तियों की अपेक्षा करता है पोस्टग्रेज उपयोगकर्ता के रूप में चलाने के लिए। ऐसा नहीं होगा।
बैच मोड में, su - postgres
शुरू होता है और तुरंत बाहर निकलता है क्योंकि इसे कोई कमांड नहीं दी जाती है। फिर स्क्रिप्ट के अगले आदेशों को निष्पादित किया जाता है क्योंकि उपयोगकर्ता स्क्रिप्ट लॉन्च कर रहा है (संभवतः रूट) और वे विफल हो जाते हैं।
इसके बजाय, आपको कुछ इस तरह लिखना चाहिए:
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
टिप्पणियों में दिए गए सुझाव मानते हैं कि आपने पैकेज के माध्यम से पोस्टग्रेस्क्ल स्थापित किया है, लेकिन यह प्रश्न का संदर्भ नहीं है। जब आप स्रोत से ./configure
. के साथ इंस्टॉल करते हैं तर्कों के बिना और make install
, यह कभी भी /usr/local/pgsql
. के बाहर कुछ भी स्थापित नहीं करेगा . /etc
. के तहत स्टार्टअप स्क्रिप्ट का न होना पूरी तरह से सामान्य है इस संदर्भ में।