3

コマンドを受け取ってリモート ホストで実行するスクリプトがあります。たとえば、次のように問題なく動作します。

$ rexec "ant build_all"

リモートシステムで「ant build_all」コマンドを実行します(SSHなどを介して渡します)。

私は怠け者なので、このコマンド (および最終的には他のいくつかのコマンド) のエイリアスを設定して、たとえば次のように呼び出すことができるようにしたいと考えています。

$ rant build_all

そしてbashは自動的に起動します

$ rexec "ant build_all"

これをエイリアスでやってみましたが、定義すると

alias rant=rexec ant

次に、「rant」に渡された引数は、次のように最後に追加されます。

$ rant build_all -Dtarget=Win32
(interpreted as:)
$ rexec "ant" build_all -Dtarget=Win32

rexec は実際には引数を 1 つだけ取り、他の引数を無視するため、これは失敗します。

おそらくbashラッパースクリプトでこれを行うことができますが、bashにこれを行うための組み込み、おそらく名前付き引数バージョンのエイリアス、またはperlのような引用文字列コマンド(qw / /など)があるかどうか疑問に思っていました)、またはそのようなもの。

4

3 に答える 3

3

すべての引数に対して、これは機能します。

function rant () {
    rexec "ant $*"
}

渡す引数によっては、引用符を調整する必要がある場合があります。

于 2008-11-14T14:21:45.777 に答える
2

私はケンGの答えを使用することになりましたが、1つ良いのは、次のようにrexを関数として定義することです。

function rex {
    run_remote.sh -c "$*"
}

次のように、エイリアスで rexec を使用できるようにしました。

alias rant="rex ant"

それでも、必要な方法で引数をラップします。

そのような関数をbashで使用できることを忘れていました。これは、ラッパー スクリプトを作成しなくても、私が必要としていたことを正確に実行します。

素晴らしいヒント、ありがとう!

編集: "rexec" を "rex" に変更しました。これは、システムに "rexec" というプログラムが既にあることがわかったためです。

于 2008-11-14T14:32:43.633 に答える
0

エイリアスではなく、関数として実行できます。

function rant { rexec "ant $1"; }

エイリアスのようにコマンドラインで呼び出すことができます

于 2008-11-14T14:21:32.907 に答える