Snažím se porozumět níže uvedenému skriptu a jsem zmatený z řádku su. Rozumím argumentům příkazového řádku postgres.
když udělám man su
v návodu se píše
-c, –command=COMMAND
předá jeden PŘÍKAZ do shellu pomocí -c
Nicméně řádek s su - postgres -c ...
Zdá se, že obsahuje dva příkazy
- první nastavení proměnné prostředí LD_LIBRARY
- druhý volá pg_ctl
Jsou tedy předávány dva příkazy s -c nebo jedním ?
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
}
Přijatá odpověď:
Je to jediný příkaz předaný do shellu. Shell umožňuje nastavit proměnné prostředí na základě příkazů, např.:
PGPORT=5433 psql
su
vyvolá shell se svým argumentem, takže:
su -c 'PGPORT=5433 psql'
je jako dělat:
su
exec bash -c 'PGPORT=5433 psql'
Upřímně řečeno, dávám přednost použití sudo, které usnadňuje nastavování proměnných prostředí a správně zpracovává příkazy se složitými citacemi, protože to nejde přes shell.
Náhodné „deauthenticating By Local Choice (důvod:3=deauth_leaving)“?
Linux – Nalezení správného ovladače displeje pro instalaci Arch do virtuálního boxu na Lenovo Edge13”?