我有这个脚本
#!/bin/bash
name=test.sqlite
idx=1
while [ -e $name.$idx ]; do
idx=`expr $idx + 1`;
done
while [ $idx -gt 1 ]; do
nidx=`expr $idx - 1`; mv $name.$nidx $name.$idx; idx=$nidx;
done
[ ! -e $name ] || mv $name $name.1
sqlite3 test.sqlite < /path/to/db_schema.sh
和db_schema.sh
create table objects(id integer primary key autoincrement, name text, crc integer not null);
create index objects_idx on objects(crc);
create table symbols(id integer primary key autoincrement, name text, crc integer not null);
create index symbols_idx on symbols(crc);
create table provides(object_id integer not null, symbol_id integer not null);
create index provides_idx_sym on provides(symbol_id);
create index provides_idx_obj on provides(object_id);
create unique index provides_idx_key on provides(object_id, symbol_id);
create table depends(object_id integer not null, symbol_id integer not null);
create index depends_idx_sym on depends(symbol_id);
create index depends_idx_obj on depends(object_id);
create unique index depends_idx_key on depends(object_id,symbol_id);
直到今天这仍然有效。到目前为止我尝试过的
- 硬编码路径
db_schema.sh
- 将变量设置为文件 (
$DB_SCHEMA_VAR
) - 将路径设置为变量但对文件进行硬编码 (
$PATH_TO_FILE/db_schema.sh
) - 更改文件所在的文件夹以及上面的三个文件夹
我还检查了该文件是否可执行(确实如此),写了一小行测试该文件是否存在
if [ -f db_schema.sh ] ; then ....
在创建数据库之前。测试显示db_schema.sh
是存在的,但是一旦db_schema.sh
被调用,它就突然不再存在。
这里是 Barefoot IO 要求的日志输出
+ DB_INIT (this is because i call it as a function and it is not a stand-alone script)
+ cd DB_wdsfasdfg
+ name=test.sqlite
+ idx=1
+ '[' -e test.sqlite.1 ']'
+ '[' 1 -gt 1 ']'
+ '[' '!' -e test.sqlite ']'
+ sqlite3 test.sqlite
./files/functions/init_db.sh: line 22: ./files/functions/db_schema.sh: No such file or directory
答案1
我假设 init_db.sh 和 db_schema.sh 位于同一目录中。
cd
和相对于当前工作目录的文件名的组合./files/functions/db_schema.sh
表明找不到 db_schema.sh,因为当前工作目录不再是./files/functions/init_db.sh
调用时的目录。
如果脚本之前位于正确的目录中,那么也许在调用之前cd DB_wdsfasdfg
使用 , 返回到该目录就足够了。cd -
sqlite3
或者,您可以指定一个绝对路径名(以 a 开头的路径名/
),它独立于当前目录。