20

シェルスクリプト(.zshrc内)で、別の変数に文字列として格納されているコマンドを実行しようとしています。Web上のさまざまな情報源によると、これは可能であるとのことですが、期待した動作が得られません。たぶんそれ~はコマンドの最初にあるのかもしれませんし、あるいはそれがの使用なのかもしれませんsudo、私にはわかりません。何か案は?ありがとう

function update_install()
{
    # builds up a command as a string...
    local install_cmd="$(make_install_command $@)"
    # 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
4

3 に答える 3

32

使用eval

eval ${install_cmd}
于 2012-12-02T00:27:22.450 に答える
11

§3.1で説明したように、「なぜ$varwherevar="foo bar"は期待どおりに動作しないのですか?」Z-Shell FAQshwordsplitのshell オプションを使用して、zsh変数をスペースで分割し、それらを複数の単語として扱うように指定できます。その同じページでは、検討したい代替案についても説明しています。

于 2012-12-02T00:32:58.760 に答える