O script Bash parou de reconhecer o arquivo substituto

0

Eu tenho esse script

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

e 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);

Isso funcionou até hoje. O que eu tentei até agora

  1. codificando o caminho para db_schema.sh
  2. definindo uma variável para o arquivo ( $DB_SCHEMA_VAR )
  3. definindo o caminho como variável, mas codificando o arquivo ( $PATH_TO_FILE/db_schema.sh )
  4. alterando a pasta em que o arquivo está e as três acima

Também verifiquei se o arquivo é executável (é), escrevi um pequeno teste de linha se o arquivo está presente

if [ -f db_schema.sh ] ; then .... 

antes de o banco de dados ser criado. O teste mostra que db_schema.sh está lá, mas assim que db_schema.sh é chamado, de repente ele não está mais presente.

E aqui a saída do log conforme solicitado por 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
    
por chris 20.02.2016 / 21:33

1 resposta

1

Eu assumo que init_db.sh e db_schema.sh estão no mesmo diretório.

A combinação de cd e um nome de arquivo relativo ao diretório de trabalho atual, ./files/functions/db_schema.sh , sugere que o db_schema.sh não pode ser encontrado porque o diretório de trabalho atual não é mais o que era no momento em que ./files/functions/init_db.sh foi invocado.

Se o script estava no diretório correto antes de cd DB_wdsfasdfg , talvez seja suficiente retornar a esse diretório, usando cd - , antes de invocar sqlite3 .

Como alternativa, você pode especificar um nome de caminho absoluto - um nome de caminho que começa com / - que é independente do diretório atual.

    
por 20.02.2016 / 22:53