bash script error: fonte: não encontrado

6

Eu devo estar perdendo um entendimento fundamental sobre o fornecimento de arquivos no bash. Eu tentei as diferentes abordagens que parecem funcionar, mas ainda recebo este erro source: not found .

No meu script, tentei fazer o cd para o diretório em que o arquivo que desejo localizar está localizado antes de fazer o sourcing. Isso não funcionou.

cd /home/user/path/to/
source myfile

Nenhum deles forneceu o caminho absoluto completo para o arquivo a ser originado:

source /home/user/path/to/myfile

O erro é "fonte: não encontrado" com o número da linha da declaração acima.

Há algo mais, algo básico, eu poderia estar negligenciando? Verifiquei os caminhos que estou usando e não vejo erros. Esse problema é repetitivo.

Estou executando o Ubuntu em um servidor Linode e todos os meus scripts começam com:

#!/bin/bash
    
por MountainX 23.02.2014 / 19:14

4 respostas

12

Sua segunda tentativa usando o caminho absoluto deve ser o método correto.

Possíveis causas do seu bug:

  1. O arquivo não existe.
  2. O arquivo existe, mas, por algum motivo, você não pode lê-lo (por exemplo, permissões ou algum erro no sistema de arquivos.
  3. Você tem um alias que está substituindo o source (correção com unalias source )
  4. Você tem uma função que está substituindo source (correção com unset -f source )
  5. De alguma forma, você não está usando bash (embora sua linha de ação sugerisse que você é). source não é POSIX. Usar source on dash não funciona, apenas . funciona.
  6. Meu teste com source com bash no modo POSIX funcionou, embora talvez isso se deva à minha versão ou aos sinalizadores de compilação. Talvez isso seja diferente para você e você esteja no modo POSIX.

1 e 5 apresentam erros como o que você postou.

    
por 23.02.2014 / 20:42
7

Você provavelmente está efetuando login com um usuário que executa um shell diferente de bash. Suponha que você efetue login com o usuário X e X execute sh ou outro shell, não bash, e com o usuário X você executa source myscript.sh , então você deve obter o erro fornecido.

    
por 23.02.2014 / 19:34
0

Eu estava empilhado com problemas semelhantes ao executar coisas do arquivo rpm.spec.

Corrigi o problema fornecendo um caminho explícito para o script.

Então, em vez de

source myfile

Eu tive que correr

source ./myfile

Não sei qual foi a razão exata para isso, mas parece que myfile foi pesquisado em $ PATH e em $ CWD. Eu acho que isso é alguma configuração no shell.

    
por 24.08.2017 / 10:01
0

Duas questões:

  1. Certifique-se de que o script esteja realmente sendo interpretado por bash .
  2. Se o nome que você usa com source não contiver uma barra, bash procurará em $PATH .

O script não será interpretado por bash se você explicitamente executá-lo com, por exemplo, %código%. Ele será interpretado por sh script se for executável e sua primeira linha for bash (ajuste o caminho para corresponder ao local do #!/bin/bash binário em seu sistema) e você o execute com bash , ou se você executar com ./script .

Além disso, de acordo com o manual bash script , bash

Read and execute commands from filename in the current shell environment and return the exit status of the last command executed from filename. If filename does not contain a slash, filenames in PATH are used to find the directory containing filename.

    
por 24.08.2017 / 12:24