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
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'
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