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. 파일이 있는 폴더와 그 위의 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

/또는 현재 디렉터리와 독립적인 절대 경로 이름( 로 시작하는 경로 이름)을 지정할 수 있습니다 .

관련 정보