이 스크립트가 있습니다
#!/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
) - 파일이 있는 폴더와 그 위의 3개 폴더를 변경하세요.
또한 파일이 실행 가능한지 확인하고 파일이 존재하는지 테스트하기 위해 작은 줄을 작성했습니다.
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
현재 작업 디렉토리가 더 이상 ./files/functions/init_db.sh
호출된 디렉토리가 아니기 때문에 db_schema.sh를 찾을 수 없음을 나타냅니다.
스크립트가 이전에 올바른 디렉토리에 있었다면 호출하기 전에 를 사용하여 cd DB_wdsfasdfg
해당 디렉토리로 돌아가는 것으로 충분할 것입니다.cd -
sqlite3
/
또는 현재 디렉터리와 독립적인 절대 경로 이름( 로 시작하는 경로 이름)을 지정할 수 있습니다 .