我的项目环境有 csh 和 bash 脚本
有一个 csh 脚本(比如 c.csh)来源于其他 csh 和 bash 脚本,而 c.csh 目前只有几个 setenv,我使用以下帖子中的解决方案使 setenv 从两个 csh/bash 脚本中运行。
如何编写一个可以在 csh 和 bash 中运行的 setevn/export 脚本?
繁體中文
test "$?BASH_VERSION" = "0" || eval 'setenv() { export "$1=$2"; }'
setenv MY_PROJ_BASE /home/test1
....
...
setenv MY_ENV_FILE /test2/log
MY_ENV_FILE
有环境变量,现在我需要取消设置每个变量,类似于以下。
繁體中文
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 脚本时则不需要(无所谓)。
我尝试使用类似于 setenv 的 eval,但无法使其工作。
test "$?BASH_VERSION" = "0" || eval 'foreach() do_something_to_work'
答案1
我找到了解决方案,awk
命令可以解决问题
test "$?BASH_VERSION" = "0" && eval `awk 'BEGIN { str="unsetenv "} {print str$1}' $MY_ENV_FILE