Ejecutar grupo de comandos bajo el efecto de sudo

En muchas ocaciones es necesario ejecutar sudo sobre un grupo de comandos, es una tarea muy común en sistemas tipos UNIX usar tuberías (pipe), redirección y concatenar comandos (&&, ||), por ejemplo si ejecutamos:

sudo comando1 && comando2 || comando3

El resultado obtenido no es el deseado debido a que los comandos 2 y 3 se invocaron con los privelegios del usuario actual y no bajo la influencia de sudo

Un ejemplo más específico

Partamos de la idea de que hemos instalado y configurado wordpress y queremos encontrar los ficheros donde wordpress usa la palabra array:

$ sudo find /var/www/wordpress -type f -name '*.php' -print0 | xargs -0 grep -l array

grep: /var/www/wordpress/index.php: Permiso denegado
grep: /var/www/wordpress/wp-rss.php: Permiso denegado
grep: /var/www/wordpress/wp-register.php: Permiso denegado
grep: /var/www/wordpress/wp-atom.php: Permiso denegado
grep: /var/www/wordpress/wp-login.php: Permiso denegado
...

Como se muestra en el ejemplo anterior grep no tiene acceso a los ficheros que se encuentran en /var/www debido a que se ejecuta con los privilegios del usuario actual.

La solución

Ejecutar el grupo de comandos en una subshell, para ello tecleamos:

$ sudo bash -c "find /var/www/wordpress -type f -name '*.php' -print0 | xargs -0 grep -l array"

Lecturas recomendadas

– Carl Albing, JP Bossen, Cameron Newham. bash Cookbook. Acápite 17.15, Using sudo on a Group of Commands
– man sudo
– man sudoers
– man bash

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.