2011-07-04 11 views
1

私は理解できないBASHスクリプトに奇妙な問題があります。なぜこのことが起こっているのか分かりません。長さのせいでスクリプト全体を投稿するのではなく、重要な部分だけを投稿します。cpコマンドの奇妙な動作

情報はスクリプトのコメントに記載されています。

Script

# replaces %ZONE% placeholder 
# 2 params: path, zone in format z3, z4 
zonePath() { 
    value=`echo ${1} | sed "s/%ZONE%/${2}/"` 
    echo $value 
} 

createInstance() { 
    JBOSS_NAME="jboss" 
    JBOSS_DIR="/home/jboss" 

    # echo of OUTPUT_ZONE_DIR_TMP looks correctly like /home/jboss/z3 
    OUTPUT_ZONE_DIR_TMP=`zonePath ${OUTPUT_ZONE_DIR} ${3}` 

    if [[ ! -e ${OUTPUT_ZONE_DIR_TMP}/${JBOSS_NAME}/server/${2} ]]; then 
    mkdir -p ${OUTPUT_ZONE_DIR_TMP}/${JBOSS_NAME}/server/${2} 
    cp -r ${JBOSS_DIR}/${JBOSS_NAME}/server/default/* ${OUTPUT_ZONE_DIR_TMP}/${JBOSS_NAME}/server/${2} 
    fi 

    # BUT here I get an error of wrong directory because the path is 
    # /home/jboss//jboss/server - the z3 string is missing there - WHY??? 
    cp -r `zonePath ${SOLUTION_APP_PATH} ${3}`/${1} ${OUTPUT_ZONE_DIR_TMP}/${JBOSS_NAME}/server/${2}/deploy 
} 

# in the script I call the createInstance function for example like this 
createInstance "system-long-name" "sys" z3 
createInstance "system2-long-name" "sys2" z4 
+4

についてもっと読みますshebangを '#!/ bin/bash -x'に変更し、出力を見て、すべてが適切に展開されていることを確認してください... –

+0

@Fredrikありがとう、私はそれをデバッグする方法を知らなかった。私はちょっと間違いを見つけました... – user219882

+0

-eディレクトリをテストする代わりに、-d – hornetbzz

答えて

3

変更#!/bin/bash -xにシェバングと出力を見て、すべてが適切に展開されていることを確認してください...

は、いつものように、bashのデバッグhere

+1

もお勧めします:エラー時に停止する '-e'(普通の信号捕捉の下で) – sehe

+0

Tomas、答えは受け入れられましたが、本当の質問(' cp'問題)と関係はありません。とにかく 'cp'エラーは何でしたか?どのように解決されたのですか? – mgarciaisaia