1

sshexecタスクの変数に問題があります。私のbuild.xmlantスクリプトは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<project name="sshexecproject" basedir="." default="build">
<target name="build">
    <sshexec 
        host="192.168.2.106" 
        username="root" 
        password="xxx" 
        commandResource="${basedir}/to_run.sh" 
        trust="true"
        verbose="true"
        failonerror="true"
    />
</target>

to_runスクリプトには、次の2つの変数があります。

#!/bin/bash

name="Pink Panther"
export name2="Panther Pink"

echo "Name: "
echo $name
echo "Name with export: "
echo $name2

ターミナルでスクリプトを実行すると、次の出力が得られます。

$ ./to_run.sh 
Name: 
Pink Panther
Name with export: 
Panther Pink

すべてが正常に機能していることがわかります。しかし、antからbuild.xmlスクリプトを開始すると、次の出力が得られます。

...
[sshexec] Authentication succeeded (password).
[sshexec] cmd : #!/bin/bash
[sshexec] cmd : 
[sshexec] cmd : name="Pink Panther"
[sshexec] cmd : export name2="Panther Pink"
[sshexec] cmd : 
[sshexec] cmd : echo "Name: "
[sshexec] Name: 
[sshexec] cmd : echo $name
[sshexec] 
[sshexec] cmd : echo "Name with export: "
[sshexec] Name with export: 
[sshexec] cmd : echo $name2
[sshexec] 
[sshexec] Disconnecting from ...

リモートサーバーで、このスクリプトが空のエコーを作成していることがわかります。変数nameとname2は入力されていません。なんで?

4

1 に答える 1

3

この行を変更する:

commandResource="${basedir}/to_run.sh" 

command="${basedir}/to_run.sh" 

結果は次のようになります。

[sshexec] Authentication succeeded (password).
[sshexec] cmd : /data/tmp/anttest/to_run.sh
[sshexec] Name:
[sshexec] Pink Panther
[sshexec] Name with export:
[sshexec] Panther Pink

commandResourceコマンドのリストを含むリソースファイルを取得し、各行を個別に実行するbash -c $LINEため、定義された変数は同じ行でのみ有効です。commandスクリプト全体を同じシェルで実行します。

于 2012-12-28T02:12:03.197 に答える