2012-12-02 10 views
7

एक शेल स्क्रिप्ट में (.zshrc में) मैं किसी अन्य चर में एक स्ट्रिंग के रूप में संग्रहीत एक आदेश निष्पादित करने का प्रयास कर रहा हूं। वेब पर विभिन्न स्रोत कहते हैं कि यह संभव है, लेकिन मुझे वह व्यवहार नहीं मिल रहा है जो मैं उम्मीद करता हूं। शायद यह आदेश की शुरुआत में ~ है, या शायद यह sudo का उपयोग है, मुझे यकीन नहीं है। कोई विचार? धन्यवादzsh एक चर में संग्रहीत एक आदेश चलाते हैं?

function update_install() 
{ 
    # builds up a command as a string... 
    local install_cmd="$(make_install_command [email protected])" 
    # At this point the command as a string looks like: "sudo ~some_server/bin/do_install arg1 arg2" 
    print "----------------------------------------------------------------------------" 
    print "Will update install" 
    print "With command: ${install_cmd}" 
    print "----------------------------------------------------------------------------" 
    echo "trying backticks" 
    `${install_cmd}` 
    echo "Trying \$()" 
    $(${install_cmd}) 
    echo "Trying \$=" 
    $=install_cmd 
} 

आउटपुट:

Will update install 
With command: sudo ~some_server/bin/do_install arg1 arg2 

trying backticks 
update_install:9: no such file or directory: sudo ~some_server/bin/do_install arg1 arg2 
Trying $() 
update_install:11: no such file or directory: sudo ~some_server/bin/do_install arg1 arg2 
Trying $= 
sudo ~some_server/bin/do_install arg1 arg2: command not found 
+1

आप 'zsh -c '$ {install_cmd}'' – Alex

उत्तर

15

उपयोग eval:

eval ${install_cmd} 
+0

अच्छा, सरल दृष्टिकोण का उपयोग कर सकते हैं। धन्यवाद! –

9

रूप §3.1 "Why does $var where var="foo bar" not do what I expect?" of the Z-Shell FAQ में बताया गया है, आप shwordsplit खोल विकल्प का उपयोग कर सकते हैं zsh बताने के लिए है कि आप इसे चर विभाजित करना चाहते हैं रिक्त स्थान से और उन्हें कई शब्दों के रूप में व्यवहार करें। वही पृष्ठ उन विकल्पों पर भी चर्चा करता है जिन पर आप विचार करना चाहेंगे।

+0

हम्म को इस FAQ के बारे में पता नहीं था, सूचक के लिए धन्यवाद। –

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