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 に答える