Удалить путь path linux

Удаление каталога из PATH

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

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

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

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

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

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

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

После рассмотрения других вариантов, представленных здесь, и неполного понимания того, как некоторые из них работают, я разработал свою собственную 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 с содержимым

и скрипт вызывается prepend_path_part с содержимым

и скрипт вызывается append_path_part с содержимым

сделайте их все исполняемыми, а затем назовите их так:

  • PATH=$(remove_path_part /d/Programme/cygwin/bin)
  • PATH=$(prepend_path_part /d/Programme/cygwin/bin)
  • PATH=$(append_path_part /d/Programme/cygwin/bin)

Источник

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

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

Читайте также:  Mac os big sur как обновиться

Таких местоположений несколько. Откуда операционная система знает где искать требуемую программу или её компонент? Всё просто — для этого используется переменная 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 и как добавлять к её значению новые пути поиска исполняемых и связанных с ними файлов. Как видите, всё делается достаточно просто. Таким образом вы можете добавить столько папок для поиска и хранения исполняемых файлов, сколько вам требуется.

Источник

Удалить избыточные пути из переменной $ PATH

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Пользовательский интерфейс windows forms

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Просто echo $PATH
  2. скопировать детали в текстовый редактор
  3. удалить ненужные записи
  4. PATH= # pass new list of entries

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

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

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

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

Как вы добавили эти дубликаты путей в переменную PATH? Вы, должно быть, отредактировали один из ваших файлов . . ( .tcshrc или .bashrc и т. д. в зависимости от вашей конкретной системы/оболочки). Способ исправить это — снова отредактировать файл и удалить дубликаты путей.

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

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

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

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

Источник

Как удалить путь из системного пути (`$PATH`) с помощью команд терминала?

Я добавил путь к каталогу к системному пути ( $PATH запустив,

Теперь мой путь выглядит так,

я хочу удалить /home/avinash/Desktop/raj из переменной системного пути с помощью команды (как команда экспорта делает при добавлении пути).

6 ответов

Бег export PATH=$PATH:/. не устанавливает ваш PATH общесистемный. Это просто переменная оболочки. Запустите новую оболочку и BOOM, она исчезла. Очевидно, если вы добавили это в

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

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

В вашей текущей оболочке (вашей текущей сессии gnome-терминала) вы можете сделать это используя:

удаляет самое короткое совпадение $substring от задней части $string ,

Проверьте манипуляции со строками для получения дополнительной информации.

Один грязный хак

  1. разделите каждый каталог в вашем PATH по строке, используя tr
  2. удалите то, что вы не хотите (соответствие пути «raj»), используя grep -v , а также
  3. свернуть обратно в длинную строку «:» с помощью paste ,

это, вероятно, не будет работать хорошо, если какой-либо каталог в PATH имеет : или новая строка

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

Если вы положите export заявление в любом файле инициализации оболочки, как

/.bashrc , вы можете использовать следующие команды в терминале,

Это удалит папку из пути.

Если вы экспортировали путь из терминала

Папка будет в пути, пока вы находитесь в этой оболочке. Чтобы перезаписать путь, вы должны назначить новый путь. Как уже упоминалось в другом ответе.

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

Это замена подстроки,

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

Назови это unexport и добавьте его в свой путь.

unexport /usr/local/bin /bin /sbin

Этот скрипт не меняет ваш на самом деле PATH , Если вы хотите, чтобы скрипт делал это, вам следует изменить последнюю строку. Замена echo «export PATH=$PATH» в export PATH=$PATH

export PATH=$PATH:/home/avinash/Desktop/raj (Здесь вы добавили файл в переменную пути.)

echo $PATH
Если вы выполните эту команду, это будет вывод:

Как убрать его с пути? просто выполните

Это концепция замены строк.

Объявите -x PATH=»/ желаемый / путь /you_want», если я не ошибаюсь, он сам обновит то, что вы хотите, и это будет полностью по вашему желанию, каким оно будет. [Убедитесь, что вы запускаете как root И как желаемый пользователь, для которого вы хотите, чтобы это изменение повлияло] Чтобы быть уверенным, запустите ENV после этого, чтобы убедиться, что $PATH был эффективно изменен, как вы хотите. (Это можно использовать для изменения любого вывода, который вы получите при запуске ‘/usr/bin/env’. Хотя я не знаю, является ли он постоянным. В этом отношении сделайте, как указано выше, и измените

/.bashrc для это приклеить)

Встроенная команда оболочки export Не определяет, установлена ​​ли переменная или нет, она определяет, установлены ли переменная и ее значение в подпроцессах.

Изменение переменной, экспортированной или нет, не влияет на родительский процесс или выше, поэтому изменение его в сценарии не действует, если только этот сценарий не запущен с source ,

обрежет последний компонент переменной PATH. это export статус не влияет.

Источник

Читайте также:  Принтеры терминально windows 2003
Оцените статью