Скрипты bash и fish не совместимы, но я хотел бы иметь файл, который определяет некоторые переменные окружения, которые должны инициализироваться как bash, так и fish.
Мое предлагаемое решение - определить ~/.env
файл, который будет содержать список переменных среды, например:
PATH="$HOME/bin:$PATH"
FOO="bar"
Затем я мог бы просто найти его в bash и создать скрипт, который конвертирует его в формат fish и исходники в fish.
Я думал, что может быть лучшее решение, чем это, поэтому я прошу лучшего способа распределения переменных среды между рыбой bash.
Примечание: я использую OS X.
Вот пример .env
файла, который я хотел бы, чтобы и fish, и bash обрабатывали с использованием синтаксиса Смешной рыбы (предположим, ~ / bin и ~ / bin2 - пустые каталоги):
setenv _PATH "$PATH"
setenv PATH "$HOME/bin"
setenv PATH "$PATH:$HOME/bin2"
setenv PATH "$PATH:$_PATH"
PATH
исправление для рыбы работать с путями с пробелами? строки? другие вещи, чтобы высматривать?[
это встроенный в bash и fish, поэтому не нужно правильно задавать PATH для использования[
. Образец setenv должен работать со всеми символами в PATH, за исключением двоеточий и новых строк.tr
на/usr/bin/tr
I и используя.env
файл, указанный в моем вопросе, я получаю много ошибок при запуске fish. Я не думаю, что обработка PATH правильная.Существует (сейчас?) Более простой способ, согласно ответу @ Zanchey здесь
Fish Shell: Как установить несколько переменных среды из файла, используя экспорт
Дайджест:
Рыбы:
echo -e "foo=3\nfoobar=4" > .env; export (cat .env); env | grep foo
Bash:
echo -e "foo=3\nfoobar=4" > .env; export $(cat .env | xargs); env | grep foo
с той разницей,
$
что использование иxargs
источник
Большинство систем Unix используют PAM .
pam_env
Модуль считывает файл очень нравится ваш.env
.В Linux ,
pam_env
читает системный файл/etc/environment
и файл пользователя~/.pam_environment
. В OS X (и других * BSD, которые также используют OpenPAM), кажется, чтоpam_env
читает только системный файл, поэтому вы не можете установить переменные для пользователя таким образом, только для всех пользователей.источник
Расширяя ответ @ ridiculous_fish, используя следующую функцию для bash, он также работает для массивов, содержащих пробелы, например,
$PATH
если у вас есть пробелы в ваших путях. Однако вsetenv
настоящее время она уже определена как функция в стандартной библиотеке fish, поэтому я изменил здесь имя наshenv
Теперь в вашем
.env
файле вы можете указать компоненты массива в качестве отдельных аргументовsetenv
команды:Для простой реализации fish @ ridiculous_fish:
источник
Просто создайте функцию в $ HOME / .config / fish / functions / env.fish с содержимым:
поделился всеми переменными, созданными в bash, в папке /etc/profile.d
например: /etc/profile.d/golang.sh
просто залогиньтесь на fish или bash, сделайте
echo $GOPATH $GOROOT $GOBIN $PATH
и увидите магию :)источник