实现应在 csh/bash 中运行的“for 循环”代码。当源自 bash 脚本时,“for 循环”代码部分无需关心

实现应在 csh/bash 中运行的“for 循环”代码。当源自 bash 脚本时,“for 循环”代码部分无需关心

我的项目环境有 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

相关内容