Bash 脚本停止识别替代文件

Bash 脚本停止识别替代文件

我有这个脚本

#!/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);

直到今天这仍然有效。到目前为止我尝试过的

  1. 硬编码路径db_schema.sh
  2. 将变量设置为文件 ( $DB_SCHEMA_VAR)
  3. 将路径设置为变量但对文件进行硬编码 ( $PATH_TO_FILE/db_schema.sh)
  4. 更改文件所在的文件夹以及上面的三个文件夹

我还检查了该文件是否可执行(确实如此),写了一小行测试该文件是否存在

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 开头的路径名/),它独立于当前目录。

相关内容