我希望编写一个fish shell脚本来自动将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
答案 0 :(得分:18)
鱼壳现在有一个用于字符串操作的string
内置命令。这是在2.3。3版(2016年5月)中添加的。
E.g。在这种情况下,我们可以使用string replace
删除Value:
子字符串:
set j (update-alternatives --query javac | grep Value: | string replace 'Value: ' '')
set --export JAVA_HOME (dirname (dirname $j))
string
可以做的更多。来自string command documentation:
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...]
答案 1 :(得分:2)
击:
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')))
答案 2 :(得分:2)
而不是sed,你可以使用带有正则表达式的expr,例如:
$ set a /path/to/some/folder/file.extension
命令:
$ expr "//$a" : '.*/\([^.]*\)\..*$'
file
提取没有扩展名的文件basename。
请参阅man expr
答案 3 :(得分: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