GNU/Linux >> Linux Esercitazione >  >> Linux

In che modo questo comando Su -c "..." sembra passare due comandi invece di uno?

Sto cercando di capire lo script di seguito e sono confuso sulla linea su. Comprendo gli argomenti della riga di comando di Postgres.

quando faccio man su il manuale dice

-c, –command=COMMAND
passa un singolo COMANDO alla shell con -c

Comunque la riga con su - postgres -c ... sembra contenere due comandi

  • il primo imposta la variabile d'ambiente LD_LIBRARY
  • il secondo chiama pg_ctl

Quindi ci sono due comandi passati 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
}

Risposta accettata:

È un singolo comando passato alla shell. La shell consente di impostare le variabili di ambiente in base al comando, ad esempio:

PGPORT=5433 psql

su invoca la shell con il suo argomento, quindi:

su -c 'PGPORT=5433 psql'

è come fare:

su
exec bash -c 'PGPORT=5433 psql'

Francamente, tendo a preferire l'uso di sudo, che semplifica l'impostazione delle variabili di ambiente e gestisce correttamente i comandi con citazioni complesse perché non passa tramite la shell.


Linux
  1. Come mappare un comando Vim per eseguire comandi Bash basati su Os?

  2. Sincronizzare due tipi di file in un comando?

  3. Come unire due librerie statiche ar in una?

  4. Come limitare i comandi utente in Linux

  5. Come sfuggire ai comandi in un alias bashrc?

[Suggerimenti Bash] Come fare cd e ls in un comando

[Suggerimenti Bash] Come cp o mv e cd in un comando

Come visualizzare due file affiancati in Linux

Come controllare la cronologia dei comandi di Linux in base alle date

Come eseguire più comandi Linux in un unico comando

Come passare la password al comando SSH in Linux