Estou tentando executar um script simples - clonar um repositório git em um determinado diretório e depois cd
nesse diretório para executar um script de instalação.
Este script está em um Makefile.
Mas o cd
parece não estar funcionando. Não encontra o meu script de instalação.
Eu adicionei um pwd após o cd
no script e ele me mostra o diretório de onde estou executando o script, não o diretório em que estou cd
.
Qual é o problema?
git clone http://somerepo ~/some_dir
cd ~/some_dir/
pwd
python myscript.py install
=>
pwd
: /hereIsPathToDirectoryFromWhichIRunTheScript
python: não é possível abrir o arquivo 'setup.py': [Erro 2] Nenhum arquivo ou diretório existe
Também não funciona ./setup.py
.
Se eu inserir o caminho absoluto, ~/some_dir/setup.py
o script falhará mais tarde, porque ele está tentando acessar recursos na mesma pasta.
make
cd-command
Ixx
fonte
fonte
/bin/sh: mycd: command not found
Respostas:
Você está usando um makefile. Makefiles não são scripts, cada linha é executada em um novo shell. Ou seja, quando você altera o ambiente na linha (como
cd
), essa alteração não é propagada para a próxima linha.A solução é que, quando você deseja preservar o ambiente entre os comandos, executa todos os comandos na mesma linha. Todos os comandos serão executados no mesmo shell e o ambiente é preservado.
Por exemplo:
fonte
Um script é executado em uma subshell , o que significa que ele possui o seu próprio
$PWD
. Depois que sai, você fica com o "velho"$PWD
. Se você deseja manter o que$PWD
você precisasource
(aka..
), O script em vez de executá-lo. Isso não funcionará em um Makefile, no entanto, porque cada comando é executado em um subshell separado:fonte