Saya mencoba memahami skrip di bawah ini dan saya bingung dengan baris su. Saya memahami argumen baris perintah postgres.
ketika saya melakukan man su
manualnya mengatakan
-c, –command=COMMAND
meneruskan satu COMMAND ke shell dengan -c
Namun baris dengan su - postgres -c ...
sepertinya berisi dua perintah
- yang pertama menyetel variabel lingkungan LD_LIBRARY
- yang kedua memanggil pg_ctl
Jadi apakah ada dua perintah yang diteruskan dengan -c atau satu ?
start()
{
echo $"Starting PostgreSQL 9.1: "
su - postgres -c "LD_LIBRARY_PATH=/opt/PostgreSQL/9.1/lib:$LD_LIBRARY_PATH /opt/PostgreSQL/9.1/bin/pg_ctl -w start -D \"/opt/PostgreSQL/9.1/data\" -l \"/opt/PostgreSQL/9.1/data/pg_log/startup.log\""
if [ $? -eq 0 ];
then
echo "PostgreSQL 9.1 started successfully"
exit 0
else
echo "PostgreSQL 9.1 did not start in a timely fashion, please see /opt/PostgreSQL/9.1/data/pg_log/startup.log for details"
exit 1
fi
}
Jawaban yang Diterima:
Ini adalah satu perintah yang diteruskan ke shell. Shell memungkinkan Anda untuk mengatur variabel lingkungan berdasarkan per-perintah, misalnya:
PGPORT=5433 psql
su
memanggil shell dengan argumennya, jadi:
su -c 'PGPORT=5433 psql'
seperti melakukan:
su
exec bash -c 'PGPORT=5433 psql'
Terus terang, saya cenderung lebih suka menggunakan sudo, yang membuat pengaturan variabel lingkungan menjadi mudah dan menangani perintah dengan kutipan kompleks dengan benar karena tidak melalui shell.