Что такое переменная PATH Unix и как мне к ней добавить?

11

Многие учебные пособия по программированию просят пользователей добавить что-то к себе, PATHно не объясняют, что это такое. Существующие ресурсы, которые объясняют PATHпользователям, плохо знакомым с командной строкой, не очень хороши.

  • Что такое PATHпеременная Unix ?

  • Я просто скачал программу, затем попытался запустить команду в терминале и получил command not found. Какое это имеет отношение к PATH?

  • Я добавил что-то к PATHэтой команде, и тогда все заработало:

    export PATH=/path/to/some/bin:$PATH
    

    ... но потом я получил command not foundснова в следующий раз, когда я начал свой компьютер. Как мне сделать так, чтобы он оставался включенным PATHкаждый раз, когда я открываю Терминал?

  • Как лучше всего определить, gccзагружена ли на моем компьютере программа типа Git ?

Кевин Берк
источник
3
Я прочитал многие ответы по SO, и я не нашел ответа, который отвечал бы на каждый из этих вопросов таким образом, чтобы новичок мог понять. Я хочу что-то, с чем я могу связать новых пользователей командной строки. Я надеялся добавить это как вики сообщества и добавить к нему значительную награду.
Кевин Берк
4
Могу поспорить, что смогу найти 50 просмотров, если поищу в Google по этому вопросу. Почему ты не можешь?
trojanfoe
2
И если ни одна из этих ссылок не указывает на SO для вопроса, который может быть задан здесь, то его следует добавить сюда. Мы хотим, чтобы SO находился там, где Google занимается вопросами программирования.
Пожалуйста, смотрите этот пост MSO для мотивации Кевина в задаче этого вопроса. Он, скорее всего, внесет изменения, чтобы уточнить, насколько полезна эта информация.
jmort253
1
@ jmort253: Ну, он должен начать делать это быстро. 4/5 близких голосов. Я не буду закрываться, потому что знаю, что хочет отредактировать вопрос, но ему лучше сделать это быстро.
Призрак Мадары

Ответы:

17

Путь UNIX - это переменная среды, представляющая собой список каталогов, в которых нужно искать программы, которые вы пытаетесь запустить. Это позволяет избежать необходимости использовать полный путь для запуска подобных вещей /bin/ls(например, путем ввода /binпути).

Например, путь может состоять из:

/bin:/usr/bin:/usr/sbin

и это означает, что при вводе команды xyzzyона попытается запустить первый найденный файл из текущего списка:

/bin/xyzzy
/usr/bin/xyzzy
/usr/sbin/xyzzy

(он может пропускать неисполняемые файлы, если он умен).

Вы можете добавить вещи к пути с помощью команды, например:

set PATH=/directory/to/add:$PATH:/low/priority/path

который помещает /directory/to/addв начале списка поиска пути и /low/priority/pathв конце.

Однако это обычно изменяется только для текущей оболочки. Если вы хотите внести изменения в каждую оболочку, вы должны добавить эту строку в один из ваших файлов запуска, например $HOME/.profileили /etc/profile. Правильный файл для использования зависит от самой вашей оболочки и от того, как вы настроили файлы запуска. Не всегда легко сказать, куда это должно идти, но правила обычно объясняются на странице руководства для любой оболочки, которую вы используете.

Обычно вы можете найти команду в пути с одним из:

which cmd
whence cmd

найти cmdисполняемый файл. Например, в моей системе Debian я получаю следующую расшифровку:

pax> which ls
/bin/ls

pax> which firefox
/usr/bin/firefox

pax> which xyzzy

pax> 

источник
1
Этот вопрос относится к stackoverflow?
trojanfoe
@trojanfoe, как и любой вопрос, связанный с оболочкой, да, я бы так подумал. Это является также языком программирования.
Я изменил ответ для использования :в качестве разделителя, так как он используется в * nix. Windows использует ;(вероятно, потому что :уже имеет значение в C:).
Иоахим Зауэр
На самом деле, @Joachim, возможно, правильнее было бы сказать, что в данной оболочке (а не в самой UNIX) есть определенный разделитель каталогов, но вы правы во всех тех, которые я использую, из головы. Спасибо за исправление, ура.
@paxdiablo: да, я думал об этом, но я также не могу вспомнить ни одну оболочку unix, которая не использует :(например, в Java path.separatorвсегда используется :* nix).
Иоахим Зауэр
5

Что?

Переменная среды PATH - это список каталогов, разделенных двоеточиями, которые просматривает ваша оболочка при вводе команды.

Как это установить?

PATH=$PATH:/your/directory
export PATH

Как я могу сделать так, чтобы он оставался в PATH каждый раз, когда открываю Терминал?

Поместите две предыдущие строки внутрь ~/.bash_profile(если вы используете bashдля терминала).

Pigueiras
источник
3

PATH - это переменная окружения для Unix-подобных систем.

установить путь:

export PATH=$PATH:<your path>

неустановленный путь:

unset $PATH

установить путь навсегда

в вашей домашней папке включите View -> Show Hidden Files .... файл .bash_profile пера, прежде чем экспортировать строку PATH, добавьте эту строку .....

PATH=$PATH:<yourpath>

Выйдите из системы и войдите снова ...... проверьте, работает ли она ... хорошо! он должен работать.....

Шантану Банерджи
источник
1
Извините за понижение голоса, но это плохо отформатировано и сформулировано. Старайтесь избегать чрезмерного использования жирного шрифта, чрезмерного использования многоточия ("...") и пишите полные предложения. Это должно помочь избежать таких отрицательных голосов в будущем.
Иоахим Зауэр
1
@ Йоахим Зауэр, почему ты не редактируешь ответ? Почему вы предпочитаете понижать его?
1
@MikroDel: потому что уже есть лучшие, более качественные ответы на этот вопрос, и снижение голосов требует меньше усилий. Если бы это был единственный ответ, я бы, наверное, отредактировал его. Кроме того: хотя они, как правило, неинтересны, понижающие голоса являются законным инструментом (да, рядом с каждым вопросом / ответом есть стрелки вверх и вниз).
Иоахим Зауэр
1
отредактируйте или оставьте этот комментарий примерно в то же время, но отредактируйте его и помогите Shantanu Banerjee и другим пользователям
@MikroDel: так объяснение причин понижения не помогает пользователю? Я думаю, что я был достаточно ясен в своих рассуждениях и дал практические советы по улучшению качества. Единственное, что вы настаиваете, это уменьшает мою готовность объяснять свои отрицательные голоса (и, как вы можете видеть в моем профиле, я не чрезмерно понижаю голос).
Иоахим Зауэр