Ejecute un shell dentro de sudo
:sudo bash -c 'whoami; whoami'
Puede usar cualquier carácter excepto '
dentro de las comillas simples. Si realmente desea tener una comilla simple en ese comando, use '\''
(que técnicamente es:fin literal de comillas simples, literal '
carácter, comienza el literal entre comillas simples; pero efectivamente esta es una forma de inyectar una comilla simple en una cadena literal entre comillas simples).
Puede pasar los comandos como entrada estándar en sudo'ed bash con un documento aquí:
sudo bash <<"EOF"
whoami
id
EOF
De esta manera, no hay necesidad de jugar con las comillas correctas, especialmente si tiene varios niveles, por ejemplo:
sudo bash <<"EOF"
whoami
echo $USER ~
sudo -u apache bash <<"DOF"
whoami
echo $USER ~
DOF
EOF
Produce:
root
root /root
apache
apache /usr/share/httpd
(Tenga en cuenta que no puede sangrar el terminador interno, tiene que estar solo en su línea. Si desea usar sangría en un documento aquí, puede usar <<-
en lugar de <<
, pero luego debe sangrar con tabulaciones, no espacios).
por ejemplo prueba esto, lo probé:
sudo bash -c "cd /;ls;ls|grep o"
En este ejemplo, primero cambia dir a /root, luego enumera el directorio raíz y finalmente para el directorio raíz filtra solo los directorios que tienen un nombre con la letra 'o'.
Pero lo mejor es escribir un script que haga todo lo que necesita y proporcione un código de salida para todas las acciones complejas. Luego puede sudo script en lugar de un grupo de comandos individuales como el ejemplo anterior.