É possível preservar variáveis ambientais com find -exec? Não vejo nenhuma opção usando a versão FreeBSD do find. Eu posso mudar para um loop for se for absolutamente necessário, mas esperava usar a brevidade de exec, pois é mais rápido.
A outra opção em que posso pensar não é bonita e é despejar o ambiente e lê-lo novamente no comando que estou executando.
EDITAR:
find . -type f -name '*/*.patch/go' -exec go install {} \;
Neste exemplo, quero usar o proxy http. Eu já tenho um código que diz ao git para configurar um proxy http global (acima disso).
Então, a partir do exemplo abaixo, preciso prefaciar isso com sh? Por quê?
Os processos filhos sempre herdam o ambiente. Isso significa que o utilitário a partir do qual você inicia
find ... -exec
terá acesso ao ambiente.Testando isso:
Aqui eu limpo as duas variáveis do shell
myvar1
emyvar2
, em seguida, eu as defino e exporto,myvar1
mas nãomyvar2
. Isso significamyvar1
que seria herdado por qualquer processo filho, enquantomyvar2
não seria herdado.Como você pode ver na saída de
find
, o exportado está disponível dentro do scriptmyvar1
entre aspas simples que chama lotes de nomes de caminho encontrados.sh -c
find
-exec
Você também pode usar uma atribuição na frente do
find
comando para definir o valor de uma variável de ambiente sem defini-la no shell atual. Esta é a sintaxe padrão e não apenas comofind
funciona.Outro exemplo dessa sintaxe sem usar
find
:Observe como
x
não está definido no shell atual (o últimoprintf
gera uma linha vazia).