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