Implemente o código “for loop” que deve funcionar a partir de csh / bash. A parte do código “for loop” é DON'T CARE quando originada do script bash

0

Meu ambiente de projeto tem os scripts csh e bash

Existe um script csh (digamos c.csh) proveniente de outros scripts csh e bash e o c.csh atualmente tem apenas alguns setenvs e eu tenho o setenv funcionando a partir de ambos os scripts csh / bash usando a solução da postagem a seguir.

Como escrever um setevn / script de exportação que funcionará em csh e bash?

c.csh

test "$?BASH_VERSION" = "0" || eval 'setenv() { export "$1=$2"; }' 

    setenv MY_PROJ_BASE /home/test1
    ....
    ...
    setenv MY_ENV_FILE /test2/log

MY_ENV_FILE tem as variáveis de ambiente e agora preciso desmarcar cada variável semelhante à seguinte.

c.csh

setenv MY_PROJ_BASE /home/test1
..........
........
setenv MY_ENV_FILE /test2/log
.........
........
foreach ev ("'cat $(MY_PROJ_BASE)/$(MY_ENV_FILE)'")
   unsetenv $ev
end

O código acima causaria erro quando originado de scripts bash. O código forloop é necessário apenas quando originado de scripts csh e não é necessário (NÃO SE IMPORTE) quando originado de scripts bash.

Eu tentei usar o eval similar ao setenv mas não consegui fazê-lo funcionar.

 test "$?BASH_VERSION" = "0" || eval 'foreach() do_something_to_work'
    
por user997487 13.07.2017 / 06:24

1 resposta

0

Eu tenho a solução, o comando awk faz o truque

test "$?BASH_VERSION" = "0" && eval 'awk 'BEGIN { str="unsetenv "} {print str$1}' $MY_ENV_FILE
    
por 14.07.2017 / 05:35