Bash: 'test' acha arquivo mas 'source' não

1

Eu uso virtualenvwrapper para gerenciar meus ambientes em Python. Meu arquivo postactivate global - um script Bash que é originado depois que um ambiente virtual é ativado - contém o seguinte:

if [ -f 'activate.sh' ]; then
  echo 'activate virtualenv settings'
  source 'activate.sh'
fi

Isso deve originar o arquivo activate.sh somente se o projeto que estiver conectado ao ambiente virtual contiver tal arquivo. Mas se eu usar o comando workon em um projeto que contenha esse arquivo, recebo a seguinte saída e erro:

activate virtualenv settings
/home/…/.virtualenvs/postactivate: Zeile 15: source: activate.sh: Datei nicht gefunden.

Assim, o teste parece encontrar o arquivo activate.sh , mas a linha 15 gera um erro (essa é a linha com source activate.sh e o erro se traduz para o arquivo não encontrado ). Por quê?

    
por Brutus 13.12.2016 / 12:59

1 resposta

3

Quando em modo de conformidade POSIX (como quando chamado como sh ou quando POSIXLY_CORRECT está no ambiente), quando o argumento para source não contém nenhum caractere de barra, bash procura em $PATH como o POSIX requer para o utilitário . (o equivalente padrão de bash ' source ) não o diretório atual.

Se for um script de sh , você deve:

  1. Use . , não source , que não é sh / standard.
  2. Use . ./file , se você quiser originar o file no diretório atual, não . file , que originaria o primeiro file encontrado em uma pesquisa $PATH .
por 13.12.2016 / 13:41