GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo parece que este comando Su -c “…” pasa dos comandos en lugar de uno?

Estoy tratando de entender el guión a continuación y estoy confundido acerca de la línea su. Entiendo los argumentos de la línea de comandos de Postgres.

cuando hago man su el manual dice

-c, –command=COMMAND
pasa un solo COMMAND al shell con -c

Sin embargo, la línea con su - postgres -c ... parece contener dos comandos

  • primero configurando la variable de entorno LD_LIBRARY
  • el segundo llamando a pg_ctl

Entonces, ¿se pasan dos comandos 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
}

Respuesta aceptada:

Es un solo comando pasado al shell. El shell le permite establecer variables de entorno por comando, por ejemplo:

PGPORT=5433 psql

su invoca el shell con su argumento, entonces:

su -c 'PGPORT=5433 psql'

es como hacer:

su
exec bash -c 'PGPORT=5433 psql'

Francamente, tiendo a preferir usar sudo, lo que facilita la configuración de variables de entorno y maneja correctamente los comandos con comillas complejas porque no pasa por el shell.


Linux
  1. ¿Cómo pasar la salida de un comando como argumento a otro?

  2. ¿Cómo asignar un comando Vim para ejecutar comandos Bash según el sistema operativo?

  3. Rsync ¿Dos tipos de archivos en un solo comando?

  4. Cómo mencionar comodines en comandos ansible

  5. ¿Cómo funciona el comando ps?

[Consejos de Bash] Cómo cd y ls en un solo comando

[Consejos de Bash] Cómo cp o mv y cd en un solo comando

Cómo mostrar dos archivos uno al lado del otro en Linux

Cómo verificar el historial de comandos de Linux por fechas

Cómo ejecutar múltiples comandos de Linux en un solo comando

Cómo pasar la contraseña al comando SSH en Linux