Как установить определенную версию Java как JAVA_HOME в Fish в macOS

Я использовал Bash в качестве оболочки по умолчанию для MacOS, но решил перейти на Fish.

Я пытаюсь переключаться между различными версиями Java. В Bash это было сделано с помощью ~/.bash_profile

export JAVA_HOME=`/usr/libexec/java_home -v 1.7`

Я установил эквивалент рыбы ~/.config/fish/fish_variables

set -x JAVA_HOME `/usr/libexec/java_home -v 1.7`

К сожалению, версия Java не меняется. Как я могу установить переменные окружения (в частности, конкретную версию Java), используя ~/.config/fish/fish_variables?

ОБНОВИТЬ:

Согласно FAQ вместо ~/.config/fish/fish_variables, ~/.config/fish/config.fish должен быть использован. Также я создал ~/.config/fish/fish.config вместо ~/.config/fish/config.fish,

1 ответ

Решение

Хотя я не очень хорошо знаком с Fish, на основании того, что я читаю, кажется, что проблема в обратных галочках в вашей команде:

/usr/libexec/java_home -v 1.7

Вы видите, что это просто так в Bash:

$(/usr/libexec/java_home -v 1.7)

Имейте это в виду и посмотрите на эту запись FAQ по Рыбе:

Как запустить подкоманду? Обратный удар не работает!

рыба использует скобки для подкоманд. Например:

for i in (ls)
    echo $i
end

Зная, что строка конфигурации, скорее всего, должна быть:

set -x JAVA_HOME (/usr/libexec/java_home -v 1.7)
function javaenv
   if test (count $argv) -eq 0
       /usr/libexec/java_home -V
   else
       switch $argv[1]
       case 'ls'
           /usr/libexec/java_home -V
       case 'set'
           set -xU JAVA_HOME (/usr/libexec/java_home -v $argv[2])
       end
   end
end

Можно поместить указанную выше функцию в ~/.config/fish/functions и использовать ее для получения содержимого java_home с помощью

javaenv

и установите содержимое java_home с помощью

javaenv set 1.8

Идея и содержание взяты отсюда

Другие вопросы по тегам