Search code examples
fish

String manipulation in fish shell


i wish to write a fish shell script to automatically initialize JAVA_HOME to current configured java-alternative.

In bash it would look like this (sorry for the ugly double dirname)

j=`update-alternatives --query javac | grep Value:`
JAVA_HOME=`dirname ${j#Value:}`
JAVA_HOME=`dirname $JAVA_HOME`
export JAVA_HOME

what about fish?

set j (update-alternatives --query javac | grep Value:)
set JAVA_HOME (dirname ${j#Value:}) <-- this won't work!!
set JAVA_HOME (dirname $JAVA_HOME)
set --export JAVA_HOME

Solution

  • Bash:

    j=$(update-alternatives --query javac | sed -n '/Value: /s///p')
    export JAVA_HOME=${j%/*/*}
    

    Fish:

    set j (update-alternatives --query javac | sed -n '/Value: /s///p')
    set --export JAVA_HOME (dirname (dirname $j))
    

    or

    set --export JAVA_HOME (dirname (dirname (update-alternatives --query javac | sed -n '/Value: /s///p')))