问题很简单:
回声" .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无法处理包含'〜'或用引号括起来!
执行时生成的路径正确,文件存在。 它只是一个工作场所,但它并没有解释为什么它不起作用!
我只是想知道为什么行为不一样?
感谢您的帮助!
答案 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