Eu tenho um comando comum que é chamado de diretórios muito específicos. Existe apenas um executável em / bin para este programa, e o diretório de trabalho atual é muito importante para executá-lo corretamente. O script afeta os arquivos que residem no diretório em que é executado.
Agora, eu também tenho um script de shell personalizado que faz algumas coisas em um diretório, mas preciso chamar o comando mencionado acima como se estivesse em outro diretório.
Como você faz isso em um script de shell?
bash
shell
working-directory
Marty Wallace
fonte
fonte
Respostas:
Você pode usar o
cd
builtin ou o builtinspushd
epopd
para essa finalidade. Por exemplo:# do something with /etc as the working directory cd /etc : # do something with /tmp as the working directory cd /tmp :
Você usa os builtins como qualquer outro comando e pode alterar o contexto do diretório quantas vezes quiser em um script.
fonte
cd -
um shell POSIX para voltar ao diretório anterior. Dito isso, (a)pushd
epopd
são realmente destinados ao uso interativo e (b) nem sempre é seguro supor que você podecd
voltar ao ponto de partida, especialmente em subsistemas complexos que podem usar permissões restritivas internamente (consulte stackoverflow.com/questions/ 10555284 /… ).popd
.:
símbolo significa aqui?man bash
leituras:: [arguments]
Sem efeito; o comando não faz nada além de expandir argumentos e executar qualquer redirecionamento especificado. O status de retorno é zero.Use
cd
em um subshell; a maneira abreviada de usar esse tipo de subcamada são os parênteses.(cd wherever; mycommand ...)
Dito isso, se o seu comando tem um ambiente de que necessita, ele deve realmente garantir esse ambiente em vez de colocar o ônus sobre qualquer coisa que queira usá-lo (a menos que seja um comando interno usado em circunstâncias muito específicas no contexto de um poço sistema definido maior, de forma que qualquer chamador já precisa garantir o ambiente de que necessita). Normalmente, isso seria algum tipo de wrapper de script de shell.
fonte
\
após cada um;
para comandos de várias linhas dentro do mesmo contexto.(cd /path/to/your/special/place;/bin/your-special-command ARGS)
fonte
Se você deseja retornar ao seu diretório de trabalho atual:
current_dir=$PWD;cd /path/to/your/command/dir;special command ARGS;cd $current_dir;
current_dir
igual a suapwd
cd
para onde você precisa executar seu comandocd
voltar para a nossa variávelcurrent_dir
Outra solução por @apieceofbart
pushd && YOUR COMMAND && popd
fonte
pushd && YOUR COMMAND && pulld
popd
vez depulld
.