2012-05-17 56 views
8

我需要检查另一个用户的主目录中的目录。通常情况下,我会sudo,但是这会导致另一个流程,并且我也失去了我的环境。如何在Bash中sudo?

例如,我有:

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

我所需要的测试条件与根权限运行。

回答

5

你需要在子shell下运行它。例如:

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

这样的回答工作太,吮吸我只能接受一个答案。 –

+2

+1 - 有保证的'/ bin/test'的罕见用途之一。 –

+0

更好的答案,因为没有双重评估的风险:如果有人试图参数化其他答案,但做得不好(即''sudo bash -c“[[-d $ filename]]”'),你可能会有恶意作为命令执行的文件名(考虑'filename ='foo]] || rm -rf $ HOME || [[true'')。相比之下,这个答案是完全安全的:'如果sudo test -d“$ filename”'不会运行'test'以外的任何命令。 –