Реализуйте код "for loop", который должен работать из csh/bash. Часть кода "for loop" НЕ УХОДИТ, если она получена из скрипта bash

В моей среде проекта есть сценарии csh и bash

Существует сценарий csh (скажем, c.csh), полученный из других сценариев csh и bash, и в c.csh в настоящее время имеется всего несколько setenvs, и я получил setenv, работающий от обоих сценариев csh/bash, используя решение из следующего поста.

Как написать сценарий setevn/export, который будет работать как в csh, так и в 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 имеет переменные окружения, и теперь мне нужно сбросить каждую переменную, как показано ниже.

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.

Я пытался использовать eval, похожий на setenv, но не смог заставить его работать.

 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
Другие вопросы по тегам