【问题标题】:Open a database shell from ant task?从 ant 任务打开数据库外壳?
【发布时间】:2011-07-28 15:06:38
【问题描述】:

我一直在从事 Python/Django 项目,我刚刚发现了“./manage.py dbshel​​l”命令。它会读取您的配置文件以获取数据库凭据并为您启动一个数据库 shell。

在底层,Django 使用 Python os.execvp (http://docs.python.org/library/os.html#os.execvp) 函数。我在 Java/Ant 中找不到这样的东西,但我确实发现您可以将正在运行的进程重定向到您的 TTY (mysql > tty),但尝试为此创建任务似乎没有工作。

<target name="test">
    <exec executable="/bin/sh">
        <arg value="-c" />
        <arg value="mysql -u foo -pbar &gt; `tty`" />
    </exec>
</target>

当我运行这个任务时,我没有得到一个数据库外壳,并且在当前目录中创建了一个名为“not a tty”的文件。

对于如何从 ant 启动交互式进程,有人有任何其他想法吗?

【问题讨论】:

标签: shell ant tty io-redirection


【解决方案1】:

不确定它是否能让你一路走好,但这是互动的开始:

<target name="get-inputs" depends="confirm-props">
    <input message="Enter your DB username:" addproperty="db.user.name" />
    <input message="Enter your DB password:" addproperty="db.user.password" />
    <input message="Enter DB Host:" addproperty="db.server" />
    ...call some other ant process...
</target>

还有一个用于 SQL 调用:

<target name="db1">
    <sql
        driver="com.mysql.jdbc.Driver"
        url="jdbc:mysql://${db.server}:3306/?useUnicode=true&amp;characterEncoding=UTF-8"
        userid="name"
        password="password"
        classpathref="service.classpath"
    >
        <transaction>
            <![CDATA[
            insert into foo (field1) values ('${foo-value}');
            ]]>
        </transaction>
    </sql>
</target>

【讨论】:

    猜你喜欢
    • 2018-07-24
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 2013-11-11
    • 1970-01-01
    • 2021-11-21
    相关资源
    最近更新 更多