2012-05-17 7 views
8

Necesito buscar un directorio en el directorio de inicio de otro usuario. Normalmente sudo pero eso bifurca otro proceso y también pierdo mi entorno.¿Cómo puedo sudo si en Bash?

Por ejemplo, tengo:

if [[ -d "/home/otheruser/svn" ]]; 
then 
    echo "SVN exists" 
else 
    echo "SVN does not exist" 
fi 

necesito la condición de la prueba se ejecute con permisos de root.

Respuesta

5

Debe ejecutarlo en una subshell. Ejemplo:

if sudo bash -c '[[ -d "/home/otheruser/svn" ]]' 
then 
    echo "SVN exists" 
else 
    echo "SVN does not exist" 
fi 
26
if sudo test -d "/home/otheruser/svn"; then 
+1

Esta respuesta trabajó también, chupa puedo aceptar solamente una respuesta. –

+2

+1 - Uno de los raros usos de '/ bin/test' que está garantizado. –

+0

Mejor respuesta de lejos, porque no hay riesgo de doble evaluación: si alguien intentaba parametrizar la otra respuesta pero lo hacía mal (es decir, 'sudo bash -c" [[-d $ nombredearchivo]] "'), podría tener problemas nombres de archivo ejecutados como comandos (considere 'filename = 'foo]] || rm -rf $ HOME || [[true''). Por el contrario, esta respuesta es completamente segura: 'si sudo test -d" $ filename "' no ejecutará ningún comando que no sea 'test'. –

Cuestiones relacionadas