11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

fishシェルでSDKMANを使えるようにする方法

Last updated at Posted at 2016-12-02

良いと聞いたfishシェルをお試し中。が、SDKMANが動かない…。

fishシェルでも動作する方法を上げてくれている人がいて、その方法+αで一応動作するようになった。

ほとんど、 Using SDKMAN with the Fish Shell | Ted Wise に書いてある方法。

まずは、 ~/.config/fish/functions/sdk.fish を以下の内容で作成。(上記Webサイトから転載)

sdk.fish
function sdk --description 'Software Development Kit Manager'
  set after_env (mktemp -t env)
  set path_env (mktemp -t env)

    bash -c "source ~/.sdkman/bin/sdkman-init.sh && sdk $argv && printenv > $after_env"

    # remove any pre-existing .sdkman paths
    for elem in $PATH
      switch $elem
        case '*/.sdkman/*'
          # ignore
        case '*'
          echo "$elem" >> $path_env
      end
    end

    for env in (cat $after_env)
      set env_name (echo $env | sed s/=.\*//)
      set env_value (echo $env | sed s/.\*=//)
      switch $env_name
        case 'PATH'
          for elem in (echo $env_value | tr ':' '\n')
            switch $elem
              case '*/.sdkman/*'
                echo "$elem" >> $path_env
            end
          end
        case '*'
          switch $env_value
            case '*/.sdkman/*'
              eval set -g $env_name $env_value > /dev/null
          end
      end
    end
    set -gx PATH (cat $path_env) ^ /dev/null

    rm -f $after_env
    rm -f $path_env
end

これで、例えば sdk list gradle すると実行はできるようになる。
ただ、これだけだと、シェルを開いた時に gradle -v するとPATHが通ってなくて実行できなくて、一回何かしらsdkコマンドを実行しないとダメ。

なので、 config.fish に以下を追記する。

config.fish
sdk help > /dev/null

ここまでの設定をすれば、fishシェルでもSDKMANが使えるようになるんだけど、SDKMANにアップデートがあると、アップデート可否の質問が出たまま止まってしまう…。
これを防止するために、暫定でSDKMAN自身のアップデートを自動に設定しておいた。

~/.sdkman/etc/config
sdkman_auto_selfupdate=true

関連:fishシェルでJAVA_HOMEを設定

Macで、zshとかbashから引き継いで、

export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_45`

って、 config.fish に書いてもJAVA_HOMEがセットされない。

fishシェルの場合は、こんな書き方。 java_home の実行がバッククォートじゃないのがポイント。

config.fish
set -x JAVA_HOME (/usr/libexec/java_home -v 1.8.0_45)

これで、SDKMANもSDKMANでインストールしたものも実行できるようになる。

参考

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?