Если вы действительно хотите, чтобы это произошло, это можно сделать, но это сложно. Один из способов сделать это - использовать awk для вывода правильного синтаксиса и оценки текста, возвращаемого с awk. Чтобы поделиться одним файлом значений переменной среды между основными sh и csh, следующая команда в файле импортирует файл переменной в среду: (да, да, это одна огромная линия из-за негибкого способа, которым обрабатывают некоторые оболочки . кавычку Если вы не против того, файл .awk тоже можно использовать AWK -f ...)
eval `awk '{ var = $1; $1=""; val=substr($0,2); if (ENVIRON["SHELL"] ~ /csh$/) { print "setenv", var, " \"" val "\";" } else { print var "=\"" val "\"" ; print "export", var }}' $HOME/env_value_file`
файл значение переменной в этом формате:
FOO value for foo
BAR foo bar
BAZ $BAR plus values $FOO
Design примечания для образовательных целей:
- В awk нет простого способа доступа к полям 2-NF, поэтому, если бы могли быть пробелами в наших значениях переменных, нам нужно изменить $ 1, чтобы получить $ 0, чтобы приблизиться к желаемому значению.
- Чтобы это сработало, поскольку переменная SHELL всегда задана, но не как переменная среды , а не с последовательной капитализацией, вы должны влачить переменную окружения SHELL из значения оболочки, как показано ниже. как переменная среды, прежде чем использовать скрипт.
- Кроме того, если вы хотите, чтобы новые значения среды присутствовали после сценария среды импорта , вам необходимо указать сценарий среды.
- Если оболочка не работает хорошо, вам придется настроить скрипт.
для Bourne вкусов оболочки (Башк, ш, КШ, ЗШ):
export SHELL
. import_environment
Для CSH вкусов: (переменная оболочки имеет тенденцию быть ниже, случай CSH оболочек)
setenv SHELL "$shell"
source import_environment
Для какие значения «любого»? – choroba
bash, tcsh, ksh, ... – Mojoy