GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie scheint dieser Befehl su -c „…“ zwei Befehle anstelle von einem zu übergeben?

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

an die Shell übergeben

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 ?

übergeben
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
}

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.


Linux
  1. Wie übergibt man die Ausgabe eines Befehls als Argument an einen anderen?

  2. Wie funktioniert der Tee-Befehl?

  3. Wie füge ich zwei statische Bibliotheken zu einer zusammen?

  4. Wie kann man Befehlen in einem Bashrc-Alias ​​entkommen?

  5. Wie funktioniert der ps-Befehl?

[Bash-Tipps] How To cd und ls in einem Befehl

[Bash-Tipps] Wie cp oder mv und cd in einem Befehl ausgeführt werden

So zeigen Sie zwei Dateien nebeneinander in Linux an

So überprüfen Sie den Verlauf der Linux-Befehle nach Datum

So führen Sie mehrere Linux-Befehle in einem einzigen Befehl aus

So übergeben Sie das Passwort an den SSH-Befehl in Linux