В моей среде проекта есть сценарии 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 ответ1

0

Я получил решение, команда awk цели

test "$?BASH_VERSION" = "0" && eval `awk 'BEGIN { str="unsetenv "} {print str$1}' $MY_ENV_FILE

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .