11

我希望编写一个鱼壳脚本来自动将 JAVA_HOME 初始化为当前配置的 java-alternative。

在 bash 中它看起来像这样(对于丑陋的双目录名感到抱歉)

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

鱼呢?

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
4

4 回答 4

24

鱼壳现在有一个string用于字符串操作的内置命令。这是在 2.3.0 版(2016 年 5 月)中添加的。

例如,在这种情况下,我们可以使用string replace删除Value:子字符串:

set j (update-alternatives --query javac | grep Value: | string replace 'Value: ' '')
set --export JAVA_HOME (dirname (dirname $j))

还有很多string可以做的。从字符串命令文档

Synopsis

string length [(-q | --quiet)] [STRING...]
string sub [(-s | --start) START] [(-l | --length) LENGTH] [(-q | --quiet)]
           [STRING...]
string split [(-m | --max) MAX] [(-r | --right)] [(-q | --quiet)] SEP
             [STRING...]
string join [(-q | --quiet)] SEP [STRING...]
string trim [(-l | --left)] [(-r | --right)] [(-c | --chars CHARS)]
            [(-q | --quiet)] [STRING...]
string escape [(-n | --no-quoted)] [STRING...]
string match [(-a | --all)] [(-i | --ignore-case)] [(-r | --regex)]
             [(-n | --index)] [(-q | --quiet)] [(-v | --invert)] PATTERN [STRING...]
string replace [(-a | --all)] [(-i | --ignore-case)] [(-r | --regex)]
               [(-q | --quiet)] PATTERN REPLACEMENT [STRING...]
于 2016-07-26T20:08:46.157 回答
3

重击:

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

鱼:

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

或者

set --export JAVA_HOME (dirname (dirname (update-alternatives --query javac | sed -n '/Value: /s///p')))
于 2011-01-29T21:48:33.617 回答
2

代替 sed,你可以使用带有正则表达式的 expr,例如:

$ set a /path/to/some/folder/file.extension

命令:

$ expr "//$a" : '.*/\([^.]*\)\..*$'
file

提取没有扩展名的文件基名。

man expr

于 2014-02-23T11:45:29.773 回答
0

鱼壳:

~> set JAVA_HOME (readlink -f /usr/bin/javac | sed "s:/bin/javac::")
~> echo $JAVA_HOME

输出(示例):

/usr/lib/jvm/java-8-openjdk-amd64

你也可以添加到~/.config/fish/config.fish这一行:

set JAVA_HOME (readlink -f /usr/bin/javac | sed "s:/bin/javac::")

WBR

于 2016-02-04T09:48:01.303 回答