Я недавно добавил эту строку в мой .bashrc файл, чтобы я мог использовать компилятор java javac из командной строки (используя MobaXTerm, если это имеет значение)

export PATH=$PATH:"/cygdrive/c/Program Files/Java/jdk1.8.0_101/bin"

Но я вижу несколько дубликатов в моей переменной $PATH (обратите внимание, что новые строки были добавлены только для удобства чтения)

/bin:
/drives/c/Users/Justin/DOCUME~1/MobaXterm/slash/bin:
/drives/c/WINDOWS:
/drives/c/WINDOWS/system32:
/cygdrive/c/ProgramFiles/Java/jdk1.8.0_101/bin:
/cygdrive/c/ProgramFiles/Java/jdk1.8.0_101/bin:
/cygdrive/c/ProgramFiles/Java/jdk1.8.0_101/bin

Что-то не так с тем, как я добавляю свои $PATH?

5
J-Win 29 Май 2017 в 00:04

2 ответа

Лучший ответ

Если PATH управляется различными сценариями, которые вызываются .bashrc, это обычно является результатом.

Хотя дубликаты в PATH не являются серьезной проблемой, существует два подхода к сохранению PATH свободными от них:

  1. Проверьте, существует ли каталог в PATH перед добавлением
  2. Dedupe PATH как последний шаг в вашем .bashrc

Проверьте перед добавлением

javabin="/cygdrive/c/ProgramFiles/Java/jdk1.8.0_101/bin"
if ! [[ $PATH =~ "$javabin" ]]; then
  PATH="$PATH:$javabin"
fi

Или напишите функцию:

add_to_path() {
    local dir re

    for dir; do
        re="(^$dir:|:$dir:|:$dir$)"
        if ! [[ $PATH =~ $re ]]; then
            PATH="$PATH:$dir"
        fi
    done
}

add_to_path "/cygdrive/c/ProgramFiles/Java/jdk1.8.0_101/bin"

Dedupe (лучший метод, который я нашел на SO)

PATH="$(perl -e 'print join(":", grep { not $seen{$_}++ } split(/:/, $ENV{PATH}))')"

Смотрите также на Unix и Linux / SuperUser StackExchange:

4
codeforester 6 Мар 2019 в 19:26

В / etc / profile определена функция pathmunge:

pathmunge () {
    case ":${PATH}:" in
        *:"$1":*)
            ;;
        *)
            if [ "$2" = "after" ] ; then
                PATH=$PATH:$1
            else
                PATH=$1:$PATH
            fi
    esac
}

К сожалению, он также не установлен в конце файла. Однако просто удалите неустановленную строку, и вы сможете использовать ее в файле .bashrc.

0
Jack 28 Май 2017 в 21:13