2012-05-17 12 views
8

मुझे किसी अन्य उपयोगकर्ता की होम निर्देशिका में निर्देशिका की जांच करने की आवश्यकता है। आम तौर पर मैं सूडो करता हूं लेकिन यह एक और प्रक्रिया का त्याग करता है और मैं अपना पर्यावरण भी खो देता हूं।बैश में अगर मैं कैसे सूड करूं?

उदाहरण के लिए, मेरे पास है:

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

मैं परीक्षण हालत जड़ अनुमतियों के साथ चलाने के लिए की जरूरत है।

उत्तर

5

आपको इसे सबहेल के तहत चलाने की आवश्यकता है। उदाहरण:

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

अब तक बेहतर उत्तर है, क्योंकि दोहरे मूल्यांकन का कोई जोखिम नहीं है: अगर किसी ने दूसरे उत्तर को पैरामीटर करने का प्रयास किया लेकिन इसे बुरी तरह से किया (यानी 'सुडो बाश-सी "[[-d $ filename]]" ') आप दुर्भावनापूर्ण हो सकते हैं आदेशों के रूप में निष्पादित फ़ाइल नाम ('filename = 'foo]] || rm -rf $ HOME || [[true'') पर विचार करें। इसके विपरीत, यह उत्तर पूरी तरह से सुरक्षित है: 'अगर सूडो परीक्षण-डी "$ filename" 'test' के अलावा कोई भी आदेश नहीं चलाएगा। –

संबंधित मुद्दे