Estoy tratando de entender el guión a continuación y estoy confundido acerca de la línea su. Entiendo los argumentos de la línea de comandos de Postgres.
cuando hago man su
el manual dice
-c, –command=COMMAND
pasa un solo COMMAND al shell con -c
Sin embargo, la línea con su - postgres -c ...
parece contener dos comandos
- primero configurando la variable de entorno LD_LIBRARY
- el segundo llamando a pg_ctl
Entonces, ¿se pasan dos comandos con -c o uno?
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
}
Respuesta aceptada:
Es un solo comando pasado al shell. El shell le permite establecer variables de entorno por comando, por ejemplo:
PGPORT=5433 psql
su
invoca el shell con su argumento, entonces:
su -c 'PGPORT=5433 psql'
es como hacer:
su
exec bash -c 'PGPORT=5433 psql'
Francamente, tiendo a preferir usar sudo, lo que facilita la configuración de variables de entorno y maneja correctamente los comandos con comillas complejas porque no pasa por el shell.