1

MySQL からコマンドを受け取り、それらを 1 つずつ実行するスクリプトに取り組んでいます。私の問題は、スクリプトからコマンドを実行できないことです:

./bash.sh: 26 行目: /myscript.sh -c "": そのようなファイルまたはディレクトリはありません

行 26 は、実行したいコマンド ("$com") です。コマンドを手動で実行しようとすると、「$ com」の内容をエコーし​​、ターミナルから実行すると機能します。

私は何を間違っていますか?

if [ ! "${#array[*]}" -eq "0" ]; then
for (( i=0 ; i<cnt ; i++ )); do
        id=$(echo "${array[$i]}" | sed 's@\t@^@g' | cut -f'1' -d'^')
        com=$(echo "${array[$i]}" | sed 's@\t@^@g' | cut -f'2' -d'^')
        imp=$(echo "${array[$i]}" | sed 's@\t@^@g' | cut -f'3' -d'^')

        if [[ "$id" = [0-9]* ]]; then
                "$com"
                echo "DELETE FROM list WHERE id='$id'" | mysql "$DB_USER" -u "$DB_USER" -p"$DB_PASS"
        fi
done
else
        echo "The list is empty"
fi
4

2 に答える 2

4

コミュニティ Wiki として追加

この質問はVaughn Catoのコメントで解決され、OP は 3 月以降見られていません。

evalスクリプト内の if ステートメントは次のようになります。

if [[ "$id" = [0-9]* ]]; then
   eval "$com"
   echo "DELETE FROM list WHERE id='$id'" | mysql "$DB_USER" -u "$DB_USER" -p"$DB_PASS"
fi
于 2013-08-30T11:14:52.763 に答える
1

変化する

"$com"

むしろ

$com

(覚えておいてください:引用符が多すぎると、少なすぎるのと同じくらい有害になる可能性があります)

よりも

eval "$com"
  • eval引用の望ましくない効果を元に戻すためだけに使用するのは、不必要に複雑です。
于 2013-08-30T11:03:58.580 に答える