Executing shell command from ruby console returning Permission Denied Error? -


रूबी कंसोल से शेल कमांड निष्पादित करते समय अनुमति अस्वीकृत त्रुटि प्राप्त करना। और शेल से एक ही शेल कमांड काम कर रहा है।

शेल से ..

  test-workstation: ~ $ "grep '^ datadir =' / etc / Mysql / my.cnf | cut -f 2 -d '=' `/ db_backups" bash: / db_backups: एक डायरेक्ट्री परीक्षण है @ test-workstation: ~ $   

रूबी कंसोल से ।

  & gt; & gt; % X ["grep '^ datadir =' /etc/mysql/my.cnf | कट -f 2 -d '='` / db_backups]] sh: / db_backups: अनुमति अस्वीकृत = & gt; ""   

कोई आइडिया!

आप कोशिश कर रहे हैं एक निर्देशिका निष्पादित और गोले नहीं कह रहे हैं; बाश कहते हैं, "/ db_backups: कोई निर्देशिका नहीं है" जबकि sh कहते हैं "/ db_backups: अनुमति अस्वीकृत" यदि आप बैकडेटेड भाग को निष्पादित करते हैं:

  grep '^ datadir =' /etc/mysql/my.cnf | कट -फ 2-डी '='   

आप लगभग निश्चित रूप से कोई आउटपुट नहीं देख पाएंगे और शायद यही कारण है कि आपका नियमित अभिव्यक्ति बहुत तंग है, ऐसा कुछ:

  grep '^ [] * दत्तादिर [] * =' /etc/mysql/my.cnf | कट -f2 -d '='   

आप बेहतर सेवा देंगे; चरित्र वर्गों में एक स्थान और एक टैब होता है।

अब जब आप सही चीजों की तलाश कर रहे हैं, तो हम इसके लिए आगे बढ़ सकते हैं कि क्यों यह अभी भी काम नहीं करेगा। % x [] उद्धरण शेल का उपयोग करके अपनी तर्क निष्पादित करने की कोशिश करता है। जब आप बैकटाइटेड ग्रेप सामान फ़ीड करते हैं:

  `grep '^ [] * दतादिर [] * =' /etc/mysql/my.cnf | कट -f2 -d '=' `/ db_backups   

खोल में, आपको एक निर्देशिका नाम मिलना चाहिए जो कि / db_backups से समाप्त होता है लेकिन आप निष्पादित नहीं कर सकते एक निर्देशिका मुझे लगता है कि आप इसे डायरेक्टरी नाम का निर्माण करना चाहते हैं:

  d =% x [echo `grep '^ [] * datadir [] * =' /etc/mysql/my.cnf | Cut -f2 -d '=' `/db_backups] .strip   

अग्रणी गूंज और .strip पर ध्यान दें लौटे स्ट्रिंग .choo से उत्पन्न नई कोड को निकालने के लिए .strip आवश्यक है।

मुझे लगता है कि आप उस चीज़ के लिए बहुत परेशानी के माध्यम से जा रहे हैं जो आसानी से रूबी के एक जोड़े लाइनों के साथ किया जा सकता है:

  dir = शून्य फ़ाइल। ओपन ('/ etc / mysql / my.cnf')। प्रत्येक do | line | अगर (एम = लाइन। मैच (/ ^ \ s * datadir \ s * = \ s * (\ S +) /)) dir = m [1] + '/ db_backups' ब्रेक एंड एंड   

यदि आप चाहें तो शायद थोड़ा सा कस कर सकते हैं लेकिन मुझे लगता है कि रूबी बैकटीक्स के अंदर शेल बैकटिक्स डालकर कम से कम कम भ्रमित है।

Comments