12

内部的に他のスクリプト (つまり .sh) を呼び出す Call.sh という名前のシェル スクリプトがあり、問題なく動作しています。次に、 antユーティリティから Call.sh を実行します。.sh を呼び出す build.xml を作成しました。しかし、スクリプトの 1 つが入力を要求しますが、ant は、それ以上の操作が失敗したために入力を与える機会を私に与えません。以下のコードを見つけてください

Build.xml

<project name="Sample" default="info">
<target name="info">
<exec executable="/bin/bash">
<arg value="/full path/Call.sh"/>
<arg value="/tmp"/>
</exec>
</target>
</project>

Call.sh

    #!/bin/bash
    echo "Begining the execution......"
    sleep 1
    sh ./input.sh
    sh ./AutomateCom.sh
    sh ./Clean.sh
    echo "*****_______*****_______"

入力.sh

    #!/bin/bash

    echo "enter the Organization name"
    read Orgname
    echo "Orgname is : $Orgname"
    sed "s/000/$Orgname/g" Final.sql >> ExecuteID.sql
    echo "Organization name has been replaced with $Orgname"

私がアリを実行すると:それは継続的に実行されます....以下は、私がアリと言ったときのo / pです

[root@krog2-rhel5-64 Work]# ant
Buildfile: /root/test/Work/build.xml

info:
     [exec] enter the Organization name
     [exec] Orgname is :
     [exec] Organization name has been replaced with

BUILD SUCCESSFUL
Total time: 0 seconds
......................................

./input.sh を実行すると、ant が入力を求めるのと同じように期待すること

[root@krog2-rhel5-64 Work]# ./input.sh
enter the Organization name
**yak**
Orgname is : yak
Organization name has been replaced with yak
  However ant doesn't give me opportunity to prompt for the user input. Any suggestions.
4

3 に答える 3

23

Ant ターゲットでスクリプトへの完全なパスを指定してみてください。

<target name="test">
  <exec executable="/bin/bash">
    <arg value="/complete/path/to/input.sh"/>
    <arg value="/tmp"/>
  </exec>
</target>

これは、シェルで次のコマンドを発行するのと同じです。

/bin/bash /complete/path/to/input.sh /tmp

<arg value="..."/>引数を示します。したがって/bin/bash、スクリプトへのパスと への2 つの引数があります/tmp。スクリプトが に渡された追加の引数を使用しない場合、bin/bashそれらは無視されます。

スクリプトinput.shが にある場合は/tmp、次のいずれかを言うことができます

  <exec executable="/bin/bash">
    <arg value="/tmp/input.sh"/>
  </exec>

また

  <exec dir="/tmp" executable="/bin/bash">
    <arg value="input.sh"/>
  </exec>
于 2013-06-24T06:20:09.070 に答える
9

質問への回答が得られ、先に進んだことを理解しています。ただし、後世のためにいくつかのことを指摘したいと思います。なぜアリを使うのですか?シェルスクリプトだけの方がいいようです。

bash スクリプトを実行しないでください。すべてのスクリプトの内容をリストしませんでしたがcall.shinput.shant でネイティブに行うのは簡単です。これにより、ビルド スクリプトのプラットフォームが独立し、ログが統合されます。入力タスクを使用して、ant から直接入力を処理できます。

<input
    message="Please enter organization name:"
    addproperty="org.name"
/>

ただし、ユーザー入力を待機するビルド スクリプトを使用しないよう強くお勧めします。プロパティを作成してorg.name、ビルド時にコマンドラインで指定するだけです。ant -Dorg.name=yak

SQL ファイルで検索置換を行う必要はありません。SQL で変数を使用して、実行時にそれらを渡すことができます。(実装はデータベースに依存します)

あなたの例がルートシェルからのものであることも私の魂を傷つけます。root としてログインしないでください。

于 2013-09-19T16:55:58.850 に答える