As palavras-chave aqui são: comando de execução com diretório de trabalho diferente . Você pode pesquisar no Google para encontrar mais informações.
Você pode chamá-lo usando parênteses - ()
$ (cd ../../../../tools/msp430/bin &&./msp430-gcc)
Os parênteses criarão um novo subshell para executar comandos dentro dele. Este novo subshell irá mudar o diretório e executar o programa neste diretório.
Citação de man bash
(list) list is executed in a subshell environment (see COMMAND
EXECUTION ENVIRONMENT below). Variable assignments and builtin
commands that affect the shell's environment do not remain in
effect after the command completes. The return status is the
exit status of list.
em que list
é apenas uma sequência normal de comandos.
Variables in a subshell are not visible outside the block of code in the subshell.
They are not accessible to the parent process, to the shell that launched the
subshell. These are, in effect, local variables.
Directory changes made in a subshell do not carry over to the parent shell.
Em conclusão: o subshell verá todas as variáveis de parent shell
, mas as usará como local . Alterações feitas por subshell para variáveis não afetam parent shell
Outro método usando sh
:
$ sh -c 'cd ../../../../tools/msp430/bin; ./msp430-gcc'
Nesse caso, sh -c
não gerará subshell , mas criará um novo shell. É por isso que não é possível ver parent shell
variables . Então lembre-se: se você definir alguma variável antes de executar sh -c
new shell não a verá.
Mas também há um pouco de confusão entre usar aspas simples ''
e aspas duplas ""
em sh -c
. Veja esta pergunta para entender a diferença, mostrarei apenas pouco exemplo:
$ TEST=test1
$ sh -c 'echo $TEST'
$ sh -c 'TEST=test2;echo $TEST'
test2
depois de executar o primeiro comando, nada foi impresso. É porque o novo shell não tem TEST
variable e ''
não expande $TEST
.
$ sh -c "echo $TEST"
test1
$ sh -c "TEST=test2;echo $TEST"
test1
aqui o primeiro comando $TEST
foi expandido devido ao uso de ""
, e mesmo se definirmos a variável TEST
no novo shell $TEST
já expandido e imprimimos test1
Fontes
- Sobre
sh -c "command"
. Resposta muito completa. - Sobre parênteses
- Similar pergunta
- Do guia bash sobre parênteses
-
Diferença entre
''
e""