O script shell é executado apenas ao copiar seu conteúdo para um novo arquivo de script de shell

0

Eu tenho um script de shell que é gerado por um jar java que eu sou incapaz de executar qualquer coisa postgres relacionados quando é criado. No entanto, ao copiar todo o seu conteúdo em um novo arquivo de script de shell, eu posso executar o script sem falhas. O conteúdo do script é basicamente apenas se conectar ao meu banco de dados postgres, criando um novo banco de dados e preenchendo-o. Aqui está um trecho:

#!/bin/bash

export DATABASE_NAME="dbname"
export DB_USERNAME="postgres"
psql -c "drop database $DATABASE_NAME;" postgres postgres
psql -c "create database $DATABASE_NAME;" postgres postgres

echo "Starting scripts"
psql -f db/pgsql/schema/schema.sql $DATABASE_NAME $DB_USERNAME

Alguma idéia de por que esse é o caso?

EDIT: Para esclarecimento, o script comete erros quando atinge esta linha:

psql -c "drop database $DATABASE_NAME;" postgres postgres

Está dando o seguinte erro para cada linha que precisa ser executada neste arquivo:

psql: fe_sendauth: no password supplied

Coisas que confirmei:

  • O script de shell é executável

  • ~ / .pgpass tem as credenciais necessárias

  • Se copiar o conteúdo deste script para um novo arquivo e eu executar esse arquivo, tudo será executado conforme o esperado.

por Sonny 17.06.2011 / 01:53

3 respostas

1

Eu usaria diff e cat -v filename para ver quais são as diferenças entre os scripts que funcionam e os que não funcionam. Assumindo que o segundo "postgres" é uma senha, pode haver algo invisível que o impeça de ser reconhecido - por exemplo, uma linha de controle-M (CR) do Windows que está sendo usada em uma máquina * Nix.

    
por 17.06.2011 / 09:50
0

Certifique-se de que o arquivo de script shell criado tenha o bit execute definido antes de executá-lo.

    
por 17.06.2011 / 01:56
0

com informações de wiki do postgres e psql --help Estou sugerindo que você coloque seu nome de usuário no arquivo .pgpass e execute o seguinte no script:

export PGPASSFILE=$HOME/.pgpass
psql -w -f db/pgsql/schema/schema.sql $DATABASE_NAME 

PS: você está executando o arquivo recém-copiado, pesquisando-o ou executando-o como um binário? ou seja:

. newfile 

OR

./newfile
    
por 17.06.2011 / 05:30