2012-12-02 12 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に説明し、あなたはそれが変数を分割したいことzshを伝えるためにshwordsplitシェルオプションを使用することができます複数の単語として扱います。同じページには、あなたが検討したいかもしれない選択肢についても議論しています。

+0

hmmは、このFAQについて、ポインタのおかげで分からなかった。 –