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.