Переменная среды, кажется, установлена, но не работает

Я использую Ubuntu 14.10 с оболочкой bash.

Я скачал gradle дистрибутив и переместил его в новый каталог. Я хочу навсегда установить переменную среды, чтобы указать на bin подкаталог папки Gradle.

Я редактировал ~/.bashrc а также ~./profile в соответствии с рекомендациями, чтобы включить путь к работающему скрипту gradle. Еще когда я печатаю gradle (это имя скрипта в папке bin), он не запускается. Выйти, перезагрузился и все, но все равно не работает.

Есть что-то, чего я здесь не хватает?

  1. добавил эту строку в конце .bashrc

    экспорт GRADLE=/home/sanctus/ Документы / Разработка /gradle-2.2/bin

  2. мой ~/.profile Содержимое файла:

    # ~/.profile: executed by the command interpreter for login shells.
    # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
    # exists.
    # see /usr/share/doc/bash/examples/startup-files for examples.
    # the files are located in the bash-doc package.
    
    # the default umask is set in /etc/profile; for setting the umask
    # for ssh logins, install and configure the libpam-umask package.
    #umask 022
    
    # if running bash
    if [ -n "$BASH_VERSION" ]; then
        # include .bashrc if it exists
        if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
        fi
    fi
    
    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$HOME/sanctus/Documents/Development/gradle-2.2/bin"
    fi
    
    gradle="$HOME/sanctus/Documents/Development/gradle-2.2/bin"
    export gradle
    

2 ответа

Решение

Прежде всего, вы не хотите делать gradle="...", Это просто создает переменную с именем gradle и не имеет значения (если эта переменная каким-то образом не используется gradle но ты так не сказал). Что вы хотите сделать, это добавить каталог, содержащий gradle выполняется в списке каталогов, которые просматривает ваша система при поиске программ для запуска. Это то, что PATH переменная делает.

Также важно не перезаписывать существующее содержимое PATH, Итак, чтобы добавить foo к PATH, ты сделаешь:

PATH:"$PATH":foo

И не

PATH="foo"

Последний удалит все из PATH и заменить его на foo в одиночестве.

Итак, объединяя все это, вы хотите добавить следующие строки в ваш ~/.profile (или же ~/.bash_profile если это существует, но не для вашего ~/.bashrc):

PATH:"$PATH:$HOME/sanctus/Documents/Development/gradle-2.2/bin"

Зачем ~/.profile или же ~/.bash_profile и не ~/.bashrc? Прежде всего потому, что для этого нужен профиль. Важнее, ~/.bashrc читается каждый раз, когда вы запускаете новую оболочку. Так, например, каждый раз, когда вы открываете новый терминал. Установка переменных среды, которые необходимо установить только один раз в этом файле, сбрасывает их каждый раз, когда вы открываете терминал, и это просто ненужные накладные расходы.

Кроме того, настройки в ~/.bashrc влияют только на программы, запускаемые из командной строки. Если вы запускаете что-то с помощью графического интерфейса пользователя (пункт меню или .desktop файл, например) эти переменные не будут доступны там.

Во многих системах, включая Ubuntu, ~/.profile читается, когда вы входите в систему графически. Поэтому переменные, установленные в этом файле, будут также доступны для программ с графическим интерфейсом. Кроме того, установка этих переменных в ~/.profile является предпочтительным, поскольку этот файл читается только один раз: при входе в систему.

Кроме того, это будет работать, даже если вы измените свою оболочку на что-то отличное от bash, так как ~/.profile читается многими из самых популярных оболочек.

Важно: если ~/.bash_profile существует, что будет читаться вместо ~/.profile, Итак, если у вас есть такой файл, используйте его вместо этого. Я рекомендую, если у вас есть ~/.bash_profile, чтобы просто удалить его и добавить все, что было там к вашему стандарту ~/.profile,

Сначала вы должны убедиться, что ваш скрипт имеет разрешения на выполнение:

chmod +x $HOME/sanctus/Documents/Development/gradle-2.2/bin/gradle

Вам может понадобиться использовать sudo сделать chmod выше..

Теперь, что вы пропустите, когда вы звоните gradle вы используете переменную окружения PATH.

PATH - это переменная окружения в Linux и других Unix-подобных операционных системах, которая сообщает оболочке, в каких каталогах искать исполняемые файлы

Даже если вы добавили путь к $PATH, вы сделали это в.profile, в то время как вы должны сделать это в .bashrc,

Так почему.bashrc, а не.profile?

пожалуйста, посмотрите мой ответ /questions/239481/path-dobavlennyij-vbashprofile-ne-rabotaet-posle-perezagruzki/239484#239484

Теперь вернемся к решению:

gedit .bashrc

Добавьте строку:

 export PATH=$PATH:$HOME/bin:$HOME/sanctus/Documents/Development/gradle-2.2/bin

Теперь сохраните и выйдите, затем отправьте его

source .bashrc

Теперь проверь это.


Срочное обновление:

PATH = "$HOME/bin: $ HOME / Sanctus / Документы / Разработка / Gradle-2,2/ бен"

Это исказит ваш PATH, и вы не сможете использовать никакие команды в /bin,/usr/bin,... так как вы просто перезаписываете свой PATH и устанавливаете его только в два каталога $HOME/bin и $HOME/sanctus/Documents/Development/gradle-2.2/bin. Удалите эту строку из вашего.profile.

проверить, влияет ли это на вашу систему,

echo $PATH 

Результат должен быть (может немного отличаться):

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Если это не так, вы должны решить проблему. Добавьте это к вашему.profile

$PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Другие вопросы по тегам