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
).
-
db2 connect to ttt
(tenga en cuenta que necesitamos tener la conexión en vivo para el segundo comando -
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.