2012-05-17 13 views
8

Ho bisogno di controllare una directory nella home directory di un altro utente. Normalmente mi piacerebbe sudo ma questo crea un altro processo e perdo anche il mio ambiente.Come posso sudo se in Bash?

Per esempio, ho:

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

Ho bisogno la condizione del test da eseguire con i permessi di root.

risposta

5

È necessario eseguirlo in una subshell. Esempio:

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

Questa risposta ha lavorato troppo, fa schifo posso accettare una sola risposta. –

+2

+1 - Uno degli usi rari di '/ bin/test' che è garantito. –

+0

Risposta migliore di gran lunga, perché non c'è il rischio di una doppia valutazione: se qualcuno ha provato a parametrizzare l'altra risposta ma l'ha fatto male (ad esempio 'sudo bash -c" [[-d $ nomefile]] "') potresti avere malizioso nomi di file eseguiti come comandi (si consideri 'filename = 'foo]] || rm -rf $ HOME || [[true''). Al contrario, questa risposta è completamente sicura: 'se sudo test -d" $ filename "' non eseguirà alcun comando diverso da 'test'. –

Problemi correlati