sqlite3 shell命令:找不到数据库文件,但路径存在:

时间:2016-07-13 00:19:44

标签: bash shell sqlite

问题很简单:

回声" .tables" | sqlite3 $ myPathVariable

如果我这样做:PATH=/my_path它有效但我做myPathVariable="my_path"它失败了。 获取grep + sed命令的结果后检索路径,如myPathVariable =`... grep ... sed`

我需要在执行时动态检索myPathVariable,请你帮助我实现这个目标,我必须遗漏一些基本的东西!

顺便说一下:echo ".tables" | sqlite3 my_path可以工作但是 echo ".tables" | sqlite3 "my_path"

编辑:变量PATH在这里只是一个坏名字,它没有引用PATH env变量,抱歉:)。 然后我注意到问题出在sqlite3中: 命令.open ~/myDatabaseFilePath失败。 命令.open "~/myDatabaseFilePath"失败。 命令.open "/.../myDatabaseFilePath"失败。 但命令.open /.../myDatabaseFilePath有效。 因此sqlite3无法处理包含'〜'或用引号括起来!

执行时生成的路径正确,文件存在。 它只是一个工作场所,但它并没有解释为什么它不起作用!

我只是想知道为什么行为不一样?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

通过您使用的任何方式获取数据库名称(顺便说一下,它不是路径而是文件名),检查它是否存在且可读。

dbname=$(... grep ... sed ... whatever)
if [[ ! -r "$dbname" ]]
then
    echo "$dbname does not exist or is not readable" >&2
    exit 1
fi
sqlite3 "$dbname" .tables