Как удалить путь из path linux

Обновлено: 07.07.2024

Я определил один и тот же путь в переменной $ PATH 6 раз.

Я не выходил из системы, чтобы проверить, сработало ли это.

Как я могу удалить дубликаты?

Переменная $ PATH выглядит следующим образом:

Как бы я сбросить его просто

Вы просто выполняете:

это было бы для текущего сеанса, если вы хотите навсегда изменить его, добавьте его в любой .bashrc, bash.bashrc,/etc/profile - все, что соответствует вашей системе и потребностям пользователя.

Если вы используете Bash, вы также можете сделать следующее, если, скажем, вы хотите удалить каталог /home/wrong/dir/ из переменной PATH :

Если вам нужно удалить путь из переменной PATH до запуска вашего скрипта, добавьте его в начало скрипта:

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

Или вы можете повторно добавить его в конец списка с помощью:

Linux: удаление избыточных путей из переменной $ PATH

В Linux From Scratch есть это функция в/etc/profile

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

Простое использование - просто указать pathremove путь к каталогу для удаления, но имейте в виду, что он должен точно совпадать:

Это удалит каждый экземпляр этого каталога из вашего пути.

Если вам нужен каталог в вашем пути, но без избыточности, вы можете просто использовать одну из других функций, например, - для вашего конкретного случая:

Но, если читаемость не является проблемой, на этом этапе вам лучше всего делать:

Будет ли это работать во всех известных человеку оболочках?

Я бы предположил, что вышеприведенное работает как минимум в sh , dash и bash . Я был бы удивлен, узнав, что это не работает в csh , fish', or ksh`. Я сомневаюсь, что это будет работать в Windows команды Shell или Powershell.

Если у вас есть Python, команда следующего вида должна делать то, что прямо спрашивается (то есть удалять лишние пути):

Однострочник (для обхода многострочных вопросов):

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

Вот однострочный код, который очищает путь

  • Это не нарушает порядок PATH, просто удаляет дубликаты
  • Лечит: и утешает ПУТЬ изящно
  • Не используются специальные символы, поэтому не требует побега

Использует /bin/awk , чтобы он работал, даже когда PATH не работает

Если вы просто хотите удалить дубликаты путей, я использую этот скрипт, который я написал некоторое время назад, так как у меня возникли проблемы с несколькими путями Perl5/bin:

И я положил его в свой

/.profile в конце. Поскольку я использую BASH почти исключительно, я не пробовал его в других оболочках.

В bash вы можете просто $

Или в этом случае (поскольку бит замены пуст) просто:

Сначала я пришел сюда, но пошел еще как-нибудь, так как думал, что для этого будет расширение параметра . Проще, чем седь!.

Для простого шаблона копирования-вставки я использую этот фрагмент Perl:

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

Нет стандартных инструментов для "редактирования" значения $PATH (то есть "добавлять папку, только если она еще не существует" или "удалять эту папку").

Чтобы проверить, каким будет путь при следующем входе в систему, используйте telnet localhost (или telnet 127.0.0.1 ). Затем он запросит ваше имя пользователя и пароль.

Это дает вам новую оболочку входа в систему (то есть совершенно новую, которая ничего не наследует от текущей среды).

Вы можете проверить значение $PATH там и редактировать ваши rc файлы до тех пор, пока они не станут правильными. Это также полезно, чтобы посмотреть, сможете ли вы вообще войти в систему после внесения изменений в важный файл.

Если вы не сделали редактируете какие-либо файлы, и вы должны изменить PATH в интерактивном режиме. В этом случае изменения не будут "прилипать", т. Е. Если вы откроете другую оболочку или выйдете из системы и снова войдете в систему, изменения будут автоматически отменены.

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

Предполагая, что ваша оболочка Bash, вы можете установить путь с помощью

но, как сказал Левон в другом ответе, как только вы прекратите работу с Shell, изменения исчезнут. Вы, вероятно, хотите настроить свое PATH в

Я пытаюсь скомпилировать wxWidgets, используя MingW, и на моем пути есть cygwin, который, кажется, конфликтует. Поэтому я хотел бы удалить /d/Programme/cygwin/bin из переменной PATH, и мне интересно, есть ли какой-нибудь элегантный способ сделать это.

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

Нет стандартных инструментов для «редактирования» значения $ PATH (т. Е. «Добавлять папку только тогда, когда она еще не существует» или «удалять эту папку»). Вы просто выполняете:

это было бы для текущего сеанса, если вы хотите навсегда изменить его, добавьте его в любой .bashrc, bash.bashrc, / etc / profile - все, что соответствует вашей системе и потребностям пользователя. Однако если вы используете BASH, вы также можете сделать следующее, если, скажем, вы хотите удалить каталог /home/wrong/dir/ из переменной PATH, предполагая, что он в конце:

Так что в вашем случае вы можете использовать

Если рассматриваемый путь находится в начале переменной PATH, вам необходимо сопоставить двоеточие в конце. Это раздражающее предостережение, которое усложняет простые общие манипуляции с переменными PATH. Имея дело с таким количеством слэшей, я предпочитаю менять разделитель регулярных выражений / на что-то вроде | : PATH=$(echo "$PATH" | sed -e 's|:/d/Programme/cygwin/bin$||') чтобы предотвратить все побеги.

Если вы не используете промежуточную переменную, вам нужно защитить / символы в каталоге, чтобы удалить их, чтобы они не рассматривались как конец текста поиска.

Первая и третья строка предназначены для размещения каждого компонента пути поиска : , чтобы избежать специального размещения первого и последнего компонента. Вторая строка удаляет указанный компонент.

Спасибо @Gilles, ваш ответ побудил меня придумать собственное решение , которое требует только трех манипуляций с PATH, а не четырех. * 8 ')

После рассмотрения других вариантов, представленных здесь, и неполного понимания того, как некоторые из них работают, я разработал свою собственную path_remove функцию, которую я добавил к своей .bashrc :

Это оказалось довольно близко к решению Жиля, но обернуто как функция bash, которую можно легко использовать в командной строке.

У него есть то преимущество, что, как функция bash, она работает как программа без необходимости быть программой на пути и не требует запуска каких-либо внешних программ, только манипулирование строкой bash.

Он выглядит довольно надежным, в частности, он не превращается somepath:mypath/mysubpath в somepath/mysubpath : если вы запускаете path_remove mypath , это была проблема, с которой я столкнулся в своей предыдущей path_remove функции.

Отличное объяснение того, как работает bash-строка, можно найти в Расширенном руководстве по Bash-Scripting .

Итак, комбинируя ответы от @gilles и @ bruno-a (и нескольких других уловок sed), я придумал эту однострочную строку, которая удалит (каждый) REMOVE_PART из PATH, независимо от того, происходит ли это в начале, середина или конец пути

Это немного громоздко, но приятно иметь возможность сделать это одним ударом. ; Используется для соединения вместе двух отдельных SED команды:

  • s@:$REMOVE_PART:@:@g (который заменяет :$REMOVE_PART: один : )
  • s@^:\(.*\):\$@\1@ (который удаляет начальные и конечные двоеточия, которые мы добавили с помощью команды echo)

И аналогичным образом, мне только что удалось придумать эту строку для добавления ADD_PART в PATH, только если PATH еще не содержит его

Измените последнюю часть на, echo "$PATH:$ADD_PART" если вы хотите добавить ADD_PART в конец PATH вместо начала.

. или чтобы сделать это еще проще, создайте скрипт remove_path_part с содержимым

Я определил один и тот же путь в переменной $PATH 6 раз.

Я не выходил, чтобы проверить, работает ли он.

Как удалить дубликаты?

Переменная $PATH выглядит следующим образом:

Как я мог бы reset просто

Вы просто выполните:

который будет для текущего сеанса, если вы хотите постоянно менять его на любые .bashrc, bash.bashrc,/etc/profile - все, что подходит вашей системе и пользователям.

Если вы используете Bash, вы также можете сделать следующее, если, скажем, вы хотите удалить каталог /home/wrong/dir/ из своей переменной PATH :

Если вам нужно удалить путь из переменной PATH до запуска script, добавьте это в начало script:

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

Или вы можете повторно добавить его в конце списка с помощью:

Вот один код строки, который очищает PATH

  • Это не мешает порядку PATH, просто удаляет дубликаты
  • Лечит: и empth PATH изящно
  • Никаких специальных символов не используется, поэтому не требуется escape

Использует /bin/awk , поэтому он работает даже при нарушении PATH

Linux с нуля имеет эту функцию в /etc/profile

Это предназначено для использования с этими функциями для добавления к пути, так что вы не делаете это с избыточностью:

Простое использование - просто указать pathremove путь к каталогу для удаления - но имейте в виду, что он должен точно соответствовать:

Это приведет к удалению каждого экземпляра этого каталога из вашего пути.

Если вам нужен каталог на вашем пути, но без избыточности, вы можете просто использовать одну из других функций, например. - для вашего конкретного случая:

Но, если читаемость не вызывает беспокойства, на данный момент вам лучше делать:

В bash вы просто можете $

Или в этом случае (поскольку бит замены пуст) просто:

Я пришел сюда первым, но пошел дальше, потому что думал, что для этого будет расширение параметра. Легче, чем sed!.

Если вы не редактировали какие-либо файлы, и вы должны были модифицировать PATH в интерактивном режиме. В этом случае изменения не будут "прилипать", т.е. Если вы откроете другую оболочку или выйдете из системы и войдете в систему, изменения исчезнут автоматически.

Заметьте, что есть и некоторые файлы конфигурации в системной системе, но вряд ли вы их изменили, поэтому, скорее всего, вы будете менять файлы в своем личном домашнем каталоге (если вы хотите, чтобы эти изменения были постоянными, как только вы установили на набор путей)

Когда вы запускаете программу из терминала или скрипта, то обычно пишете только имя файла программы. Однако, ОС Linux спроектирована так, что исполняемые и связанные с ними файлы программ распределяются по различным специализированным каталогам. Например, библиотеки устанавливаются в /lib или /usr/lib, конфигурационные файлы в /etc, а исполняемые файлы в /sbin/, /usr/bin или /bin.

Таких местоположений несколько. Откуда операционная система знает где искать требуемую программу или её компонент? Всё просто — для этого используется переменная PATH. Эта переменная позволяет существенно сократить длину набираемых команд в терминале или в скрипте, освобождая от необходимости каждый раз указывать полные пути к требуемым файлам. В этой статье мы разберёмся зачем нужна переменная PATH Linux, а также как добавить к её значению имена своих пользовательских каталогов.

Переменная PATH в Linux

Для того, чтобы посмотреть содержимое переменной PATH в Linux, выполните в терминале команду:


На экране появится перечень папок, разделённых двоеточием. Алгоритм поиска пути к требуемой программе при её запуске довольно прост. Сначала ОС ищет исполняемый файл с заданным именем в текущей папке. Если находит, запускает на выполнение, если нет, проверяет каталоги, перечисленные в переменной PATH, в установленном там порядке. Таким образом, добавив свои папки к содержимому этой переменной, вы добавляете новые места размещения исполняемых и связанных с ними файлов.

Для того, чтобы добавить новый путь к переменной PATH, можно воспользоваться командой export. Например, давайте добавим к значению переменной PATH папку/opt/local/bin. Для того, чтобы не перезаписать имеющееся значение переменной PATH новым, нужно именно добавить (дописать) это новое значение к уже имеющемуся, не забыв о разделителе-двоеточии:

Теперь мы можем убедиться, что в переменной PATH содержится также и имя этой, добавленной нами, папки:

Вы уже знаете как в Linux добавить имя требуемой папки в переменную PATH, но есть одна проблема — после перезагрузки компьютера или открытия нового сеанса терминала все изменения пропадут, ваша переменная PATH будет иметь то же значение, что и раньше. Для того, чтобы этого не произошло, нужно закрепить новое текущее значение переменной PATH в конфигурационном системном файле.

В ОС Ubuntu значение переменной PATH содержится в файле /etc/environment, в некоторых других дистрибутивах её также можно найти и в файле /etc/profile. Вы можете открыть файл /etc/environment и вручную дописать туда нужное значение:

sudo vi /etc/environment


Можно поступить и иначе. Содержимое файла .bashrc выполняется при каждом запуске оболочки Bash. Если добавить в конец файла команду export, то для каждой загружаемой оболочки будет автоматически выполняться добавление имени требуемой папки в переменную PATH, но только для текущего пользователя:


Выводы

В этой статье мы рассмотрели вопрос о том, зачем нужна переменная окружения PATH в Linux и как добавлять к её значению новые пути поиска исполняемых и связанных с ними файлов. Как видите, всё делается достаточно просто. Таким образом вы можете добавить столько папок для поиска и хранения исполняемых файлов, сколько вам требуется.

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Читайте также: