デフォルトでは、複数のファイルとディレクトリをある場所から別の場所にコピーするシェルスクリプトは、なぜファイルの2つ(そしてその2つのみ)の内容を消去しますlink ../../modules/[name_of_file]
。
APPFOLDER="/home/opt/ke"
CMD_APPCOPY="cp -fr _opt/ke/* $APPFOLDER"
[...]
echo "copying app-files to app-folder $APPFOLDER ..."
eval $CMD_APPCOPY
if [ $? -ne 0 ] ; then
echo "could not copy app-files to app-folder $APPFOLDER"
exit
fi
ファイルのコピーを手動で開始すると、すべてが正常です。
cp -fr _opt/ke/* /home/opt/ke
link ../../modules/[name_of_file]
ただし、スクリプトを実行すると、空のファイルの上に追加されたセクションを除いて、両方のファイルが空になります。
これら2つのファイルのサイズは非常に大きくも小さくもなく、このファイルとこのディレクトリ内の他のファイルとの間の唯一の違いはPerl-Module .pmタイプです。実際のソースターゲットは/home/xxx/xxx/deploy/KEB/_opt/ke/modules/
、全体のターゲットターゲットはです/home/opt/ke/modules/
。/home/xxx/xxx/deploy/KEB/
もちろん、スクリプトとマニュアルのコピーも実行されます。
この動作を説明する方法やスクリプトを修正するために見つけなければならないことに関するアイデア/提案は大いに感謝します。
答え1
あなたの問題はeval
。
#!/bin/bash
CMD1=(echo "onecmd")
CMD2=(printf "%s\n" ascrip*)
CMD3='echo cmd3'
${CMD1[@]}
${CMD2[@]}
$CMD3
それを通過する必要はありませんeval
。
はい
$ ./ascript.bash
onecmd
ascript.bash
cmd3
デバッグ
Bashのデバッグモードを有効にすると、後で何が起こっているかを確認できます。
$ bash -x ./ascript.bash
+ CMD1=(echo "onecmd")
+ CMD2=(printf "%s\n" ascrip*)
+ CMD3='echo cmd3'
+ echo onecmd
onecmd
+ printf '%s\n' ascript.bash
ascript.bash
+ echo cmd3
cmd3