una tiempo sola script programas programacion mismo linea español ejemplos ejecutar comandos comando bash sudo

bash - tiempo - programacion shell linux ejemplos



cómo ejecutar dos comandos en sudo? (8)

¿Hay alguna manera de cómo puedo ejecutar dos comandos Db2 desde una línea de comando? (Se llamarán desde un comando PHP exec ).

  1. db2 connect to ttt (tenga en cuenta que necesitamos tener la conexión en vivo para el segundo comando
  2. db2 UPDATE CONTACT SET EMAIL_ADDRESS = ''[email protected]''

Intenté esto:

sudo -su db2inst1 db2 connect to ttt; db2 UPDATE CONTACT SET EMAIL_ADDRESS = ''[email protected]''

El primer comando finaliza correctamente pero el segundo falla con el mensaje de error SQL1024N A database connection does not exist. SQLSTATE=08003 SQL1024N A database connection does not exist. SQLSTATE=08003

Tenga en cuenta que necesito ejecutar esto como usuario de php. El comando sudo -u db2inst1 id como usuario php me da el resultado correcto.


En la terminal, escribe:

$ sudo bash

Luego escribe todos los comandos que quieras. Escriba exit cuando haya terminado.

Si necesita automatizarlo, cree un archivo script.sh y ejecútelo:

$ sudo ./script.sh


La opción -s no funcionó para mí, lo hice.

Aquí hay un ejemplo de cómo podría actualizar el tamaño de registro de mi bash:

sudo -u [user] -i -- sh -c ''db2 connect to [database name];db2 update db cfg for [database name] using logsecond 20;db2 update db cfg for [database name] using logprimary 20;''


Las respuestas anteriores no le permitirán citar dentro de las comillas. Esta solución:

sudo -su nobody umask 0000 /; mkdir -p "$targetdir"

Tanto el comando umask como el mkdir-command se ejecutan con el usuario ''nobody''.


Para su comando también puede consultar el siguiente ejemplo:

sudo sh -c "whoami; whoami"


Si desea manejar las cotizaciones:

sudo -s -- <<EOF id pwd echo "Done." EOF


Una alternativa que usa eval para evitar el uso de una subcapa:

sudo -s eval ''whoami; whoami''

Nota: Las otras respuestas que utilizan sudo -s fallan porque las comillas se pasan a bash y se ejecutan como un solo comando, por lo que es necesario quitar las comillas con eval. eval se explica mejor es esta respuesta SO

Citar dentro de los comandos es más fácil también:

$ sudo -s eval ''whoami; whoami; echo "end;"'' root root end;

Y si los comandos deben dejar de ejecutarse si falla uno, use dobles ampersands en lugar de puntos y comas:

$ sudo -s eval ''whoami && whoamit && echo "end;"'' root /bin/bash: whoamit: command not found


Usualmente hago:

sudo bash -c ''whoami; whoami''


sudo puede ejecutar múltiples comandos a través de un shell, por ejemplo:

$ sudo -s -- ''whoami; whoami'' root root

Tu comando sería algo así como:

sudo -u db2inst1 -s -- "db2 connect to ttt; db2 UPDATE CONTACT SET EMAIL_ADDRESS = ''[email protected]''"

Si su versión de sudo no funciona con punto y coma con -s (al parecer, no si está compilada con ciertas opciones), puede usar

sudo -- sh -c ''whoami; whoami''

en cambio, que básicamente hace lo mismo pero te hace nombrar el shell explícitamente.