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.