Ich versuche, das folgende Skript zu verstehen, und bin verwirrt über die su-Zeile. Ich verstehe die Postgres-Befehlszeilenargumente.
wenn ich man su
mache im Handbuch steht
-c, –command=BEFEHL
einen einzelnen BEFEHL mit -c
Jedoch die Zeile mit dem su - postgres -c ...
scheint zwei Befehle zu enthalten
- Erstes Setzen der Umgebungsvariable LD_LIBRARY
- der zweite, der pg_ctl aufruft
Werden also zwei Befehle mit -c oder einem ?
übergebenstart()
{
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
}
Akzeptierte Antwort:
Es ist ein einzelner Befehl, der an die Shell übergeben wird. Die Shell ermöglicht es Ihnen, Umgebungsvariablen auf Befehlsbasis zu setzen, zB:
PGPORT=5433 psql
su
ruft die Shell mit ihrem Argument auf, also:
su -c 'PGPORT=5433 psql'
ist wie:
su
exec bash -c 'PGPORT=5433 psql'
Ehrlich gesagt tendiere ich dazu, sudo zu verwenden, was das Setzen von Umgebungsvariablen einfach macht und Befehle mit komplexen Anführungszeichen richtig handhabt, weil es nicht über die Shell geht.