1

我正在编写一个从 MySQL 获取命令并一一执行的脚本。我的问题是我无法从脚本执行命令:

./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的评论中得到了解决,并且自 3 月以来一直没有看到 OP。

必须使用接受答案,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 回答