Eu quero executar comandos como make, make install, instalação do python install sem alterar diretórios

1

Eu escrevi um script que irá baixar o software da Internet para o diretório home do usuário atual e depois descompactá-lo. E então eu tenho que make e make install e em alguns softwares eu tenho que executar python setup.py install .

O problema é que não quero alterar o diretório atual para executar todos esses comandos.

Existe alguma maneira de especificar o caminho em comandos como:

python /home/username/Desktop/urllib/setup.py install
make /home/username/Desktop/somedir/
make install /home/username/Desktop/somedir/
    
por VaIbHaV-JaIn 29.11.2012 / 07:56

3 respostas

2

O shell é uma ferramenta para combinar comandos. Certamente você já conhece o comando cd para mudar para um diretório diferente, então o que você está perdendo é algumas peças de cola para amarrá-lo junto com outro comando.

Você pode executar cd /some/dir && python foo.py para mudar para um diretório diferente e executar um comando de uma só vez. cd /some/dir; python foo.py também funcionaria; a vantagem de usar um "e" comercial duplo em vez de um ponto-e-vírgula é que, com && , o comando python não será executado se cd falhar (por exemplo, porque você digitou incorretamente o nome do diretório). Você pode encadear mais comandos dessa maneira, por exemplo cd /some/dir && python foo.py && make && make install .

Se você souber antecipadamente quais comandos deseja executar em um diretório diferente, poderá executar os comandos cd e os outros comandos em um subshell : se você escrever comandos entre parênteses, eles são executados em um processo shell separado que herda todo o estado do processo existente (ambiente, diretório atual, etc.). Uma vez que o subshell termina (no parêntese de fechamento), o shell original é retomado, não afetado por quaisquer alterações dentro do subshell.

(cd /some/dir && python foo.py && make && make install)
# back in the original directory

Se você não souber com antecedência exatamente quais comandos serão executados, poderá executar cd , depois os outros comandos e voltar para o diretório anterior com cd - .

cd /some/dir
python foo.py
make
make install
cd -
# back in the original directory

A menos que você esteja usando o zsh como shell, só poderá voltar uma vez com cd - . Se você quiser voltar mais, use os comandos pushd e popd . pushd /some/dir funciona como cd /some/dir , mas adiciona adicionalmente o diretório anterior no topo de uma pilha. popd é alterado de volta para o diretório salvo na parte superior da pilha e remove esse diretório da pilha. Você pode ver a lista de diretórios empilhados com dirs e navegar para qualquer um dos diretórios na pilha com pushd -1 , pushd -2 , etc.

pushd /some/dir
python foo.py
make
make install
popd
# back in the original directory

Alguns comandos têm a opção de dizer a eles para trabalhar em um diretório diferente. Por exemplo, make -C /some/dir é equivalente a (cd /some/dir && make) . Isso é principalmente um atalho de digitação ou conveniente quando um shell não está diretamente disponível; em geral, você sempre pode usar cd no shell.

    
por 30.11.2012 / 02:41
0

Para make , você pode usar a opção -C . Ou use o comando pushd shell para mover para o diretório apropriado e, em seguida, popd após o comando desejado ser concluído.

    
por 29.11.2012 / 15:00
-1

Você pode usar subshell para isso. Assim:

 $ pwd ; ( cd /tmp ; pwd ; ) ; pwd
/home/user
/tmp
/home/user
    
por 29.11.2012 / 10:16