从脚本执行命令时没有此类文件或目录错误

时间:2013-02-19 01:00:14

标签: linux bash

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

  

./ bash.sh:line 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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

更改

"$com"

而不是

$com

(记住:太多的报价可能和太少的报价一样有害)

而不是

eval "$com"
  • 使用eval只是为了撤消不必要的引用效果,这是不必要的复杂。