GNU/Linux >> Znalost Linux >  >> Linux

Jak se zdá, že tento příkaz Su -c „…“ předává dva příkazy místo jednoho?

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.


Linux
  1. Jak sloučit dvě statické knihovny do jedné?

  2. Jak zmínit zástupný znak v příkazech ansible

  3. Jak uniknout příkazům v aliasu bashrc?

  1. Jak předat výstup jednoho příkazu jako argument druhému?

  2. Jak namapovat jeden příkaz Vim k provádění příkazů Bash založených na OS?

  3. Jak funguje příkaz ps?

  1. Jak funguje Tee Command?

  2. Rsync dva typy souborů v jednom příkazu?

  3. Jak omezit uživatelské příkazy v Linuxu