csh / bash에서 작동해야하는 “for 루프”코드를 구현하십시오. “for 루프”코드 부분은 bash 스크립트에서 유래 할 때주의하지 않습니다. 한 csh 스크립트

내 프로젝트 환경에는 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


답변