GNU/Linux >> Tutoriels Linux >  >> Linux

Comment cette commande Su -c "..." semble-t-elle transmettre deux commandes au lieu d'une ?

J'essaie de comprendre le script ci-dessous et je suis confus au sujet de la ligne su. Je comprends les arguments de la ligne de commande postgres.

quand je fais man su le manuel dit

-c, –command=COMMAND
passe une seule COMMANDE au shell avec -c

Cependant la ligne avec le su - postgres -c ... semble contenir deux commandes

  • première configuration de la variable d'environnement LD_LIBRARY
  • deuxième appelant pg_ctl

Donc, y a-t-il deux commandes passées avec -c ou une ?

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
}

Réponse acceptée :

C'est une seule commande passée au shell. Le shell vous permet de définir des variables d'environnement pour chaque commande, par exemple :

PGPORT=5433 psql

su invoque le shell avec son argument, donc :

su -c 'PGPORT=5433 psql'

c'est comme faire :

su
exec bash -c 'PGPORT=5433 psql'

Franchement, j'ai tendance à préférer utiliser sudo, qui facilite la définition des variables d'environnement et gère correctement les commandes avec des guillemets complexes car cela ne passe pas par le shell.


Linux
  1. Comment passer la sortie d'une commande comme argument à une autre ?

  2. Comment mapper une commande Vim pour exécuter des commandes Bash basées sur OS ?

  3. Comment fonctionne la commande Tee ? ?

  4. Rsync Deux types de fichiers en une seule commande ?

  5. Comment échapper aux commandes dans un alias bashrc ?

[Bash Tips] Comment cd et ls en une seule commande

[Bash Tips] Comment cp ou mv et cd en une seule commande

Comment afficher deux fichiers côte à côte sous Linux

Comment vérifier l'historique des commandes Linux par dates

Comment exécuter plusieurs commandes Linux en une seule commande

Comment transmettre un mot de passe à la commande SSH sous Linux