내 프로젝트 환경에는 csh 및 bash 스크립트가 모두 있습니다.
다른 csh 및 bash 스크립트에서 유래 한 csh 스크립트 (c.csh)가 있으며 현재 c.csh에는 setenv가 거의 없으며 다음 게시물의 솔루션을 사용하여 두 csh / bash 스크립트에서 setenv 작업을 수행합니다.
csh와 bash 모두에서 작동하는 setevn / export 스크립트를 작성하는 방법은 무엇입니까?
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
환경 변수가 있고 이제는 다음과 유사한 각 변수의 설정을 해제해야합니다.
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
위의 코드는 bash 스크립트에서 제공 될 때 오류를 발생시킵니다. forloop 코드는 csh 스크립트에서 유래 한 경우에만 필요하며 bash 스크립트에서 유래 한 경우에는 필요하지 않습니다 (DO NOT CARE).
setenv와 비슷한 eval을 사용하려고했지만 작동하지 못했습니다.
test "$?BASH_VERSION" = "0" || eval 'foreach() do_something_to_work'
답변
나는 해결책을 얻었다, awk
명령이 트릭을 수행합니다.
test "$?BASH_VERSION" = "0" && eval `awk 'BEGIN { str="unsetenv "} {print str$1}' $MY_ENV_FILE