настройка JAVA _HOME и PATH с обновлением -альтернативы

Команда

sed 's/a/b/' *ex/config/abs.json

не будет изменять никакие файлы. Он будет читать содержимое всех файлов, имена которых соответствуют заданному шаблону, но поскольку вы не записываете изменения обратно в файлы (, вы не используете -i, например ), нет постоянного изменения, внесенные в содержимое файлов.

Чтобы увидеть, какие файлы были бы изменены, если бы вы использовалиsed -i(при условии, что вы используете GNU sed), вы должны сначала запустить

grep -l 'a' *ex/config/abs.json

Это выведет пути к файлам, которые содержат букву aи, следовательно, будут изменены sedвыражением s/a/b/, если было сделано редактирование в -месте .

3
28.08.2020, 21:11
2 ответа

Это потому, что вы изменили переменную IFS, чтобы использовать ' :'

поэтому, когда он выводит вашу переменную, он заменяется разделителем поля вывода по умолчанию, который является «пробелом», думая, что «:» является разделителем поля ввода.

вы должны сделать резервную копию перед использованием IFS, как показано ниже:

OIFS=$IFS
IFS=':';

после цикла 'for' восстановить его:

IFS=$OIFS

Также удалите ' :', который начинается без пути, предшествующего этому

PATH=${PATH#:*}    

Ваш скрипт должен выглядеть так:

#!/bin/bash

export JAVA_HOME=$(dirname $(dirname `readlink -f /etc/alternatives/java`))

OIFS=$IFS
IFS=':';
for i in $PATH;
do
        JAVA1=$i/bin/java
        JAVA2=$i/java
        if [ -d "$i" ];
        then
                if [ ! -L "$JAVA1" ] && [ -x "$JAVA1" ] || [ ! -L "$JAVA2" ] && [ -x "$JAVA2" ];
                then
                        echo "dropping path: $i";
                else
                        NEW=$NEW:$i
                fi
        fi
done
IFS=$OIFS
PATH=$NEW:$JAVA_HOME/bin
PATH=${PATH#:*}
echo 
echo "Final:"
echo $PATH
3
28.04.2021, 23:16

Почему бы не установить текущую версию Java с помощью:

sudo update-alternatives --config java
sudo update-alternatives --config javac

(и любой другой двоичный код Java, который вам нужен)

Затем установите следующие параметры в .bashrcили.zshrc:

#!/bin/bash
if [ -z "${JAVA_HOME}" ]
then
    JAVA_HOME=$(readlink -nf $(which java) | xargs dirname | xargs dirname | xargs dirname)
    if [ ! -e "$JAVA_HOME" ]
    then
        JAVA_HOME=""
    fi
    export JAVA_HOME=$JAVA_HOME
fi

исходник скрипта

Этого достаточно, чтобы иметь настроенную среду Java, нет необходимости устанавливать переменную PATH, так как она уже управляется платформой альтернатив.

Ура Ф.

1
28.04.2021, 23:16

Теги

Похожие вопросы