Я 6 раз определял один и тот же путь в переменной $ PATH.
Я не выходил из системы, чтобы проверить, работает ли это.
Как удалить дубликаты?
Переменная $ PATH выглядит так:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin
Как мне сбросить его на
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Ответы:
Вы просто выполняете:
это будет для текущего сеанса, если вы хотите изменить навсегда, добавьте его в любой .bashrc, bash.bashrc, / etc / profile - все, что подходит вашей системе и потребностям пользователя.
Примечание: это для Linux. Мы проясним это для начинающих программистов. (`, ') Не пытайтесь установить = this.
источник
echo 'export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' >> ~/.bashrc
Если вы используете Bash, вы также можете сделать следующее, если, скажем, вы хотите удалить каталог
/home/wrong/dir/
из своейPATH
переменной:источник
PATH=$(echo $PATH | sed -e 's|:/home/wrong/dir|$||')
echo $PATH | sed -e 's/:\/home\/wrong\/dir\/$//'
) перед назначением ее переменной PATH.$PATH
. Используйте это:PATH=$(echo :$PATH: | sed -e 's,:/home/wrong/dir:,:,g' -e 's/^://' -e 's/:$//')
$ PATH=
echo $ PATH | sed -e 's /: \ / scratch \ / sjn \ / anaconda \ / bin \ / python \ / $ //' 'для удаления / scratch / sjn / anaconda / bin / pythonLinux From Scratch имеет эту функцию в / etc / profile
Это предназначено для использования с этими функциями для добавления к пути, чтобы вы не делали это повторно:
Простое использование - просто указать
pathremove
путь к каталогу для удаления, но имейте в виду, что он должен точно совпадать:Это удалит каждый экземпляр этого каталога из вашего пути.
Если вам нужен каталог на вашем пути, но без дублирования, вы можете просто использовать одну из других функций, например - для вашего конкретного случая:
Но, если удобочитаемость не является проблемой, на этом этапе вам лучше просто сделать:
Будет ли это работать во всех известных человеку оболочках?
Я полагаю , выше , чтобы работать в
sh
,dash
и , поbash
крайней мере. Я был бы удивлен, узнав, что это не работаетcsh
,fish', or
кш. Я сомневаюсь, что это будет работать в командной оболочке Windows или Powershell.Если у вас есть Python, следующая команда должна делать то, что вам прямо запрошено (то есть удалять избыточные пути):
Однострочный (чтобы обойти многострочные проблемы):
Вышесказанное удаляет более поздние избыточные пути. Чтобы удалить более ранние избыточные пути, используйте индекс перевернутого списка и снова переверните его:
источник
${!PATHVARIABLE}
это своего рода косвенное обращение к переменной, но я не уверен, как это работает здесь. Не могли бы вы объяснить это, пожалуйста?local
встроенной функции (которая может использоваться только внутри функции). Если у вас есть дополнительные вопросы, вам, вероятно, следует задать новый вопрос на сайте (предварительно выполнив поиск, чтобы убедиться, что вы не создаете точную копию ...).Вот однострочный код, который очищает PATH
Используется
/bin/awk
так, чтобы он работал, даже когда PATH не работаетисточник
echo $PATH
PATH= # pass new list of entries
источник
Если вы просто хотите удалить любые повторяющиеся пути, я использую этот сценарий, который написал некоторое время назад, так как у меня были проблемы с несколькими путями perl5 / bin:
И я помещаю его в свой ~ / .profile в конце. Поскольку я использую почти исключительно BASH, я не пробовал его в других оболочках.
источник
|uniq
на,|sort|uniq
чтобы исправить это, но это изменит порядок всех каталогов в пути, что я не считаю желаемым побочным эффектом.Предполагая, что ваша оболочка - Bash, вы можете установить путь с помощью
но, как сказал Левон в другом ответе, как только вы завершите оболочку, изменения исчезнут. Вы, вероятно, захотите настроить свой
PATH
in~/.bash_profile
или~/.bashrc
.источник
В bash вы можете просто $ {var / find / replace}
Или в этом случае (поскольку бит замены пуст) просто:
Я пришел сюда первым, но пошел еще дальше, так как думал, что для этого потребуется расширение параметров . Легче, чем sed !.
Как заменить символ или слово-заполнитель в переменной значением из другой переменной в Bash?
источник
%
означает совпадение, если в конце строки, то#
в начале.Не существует стандартных инструментов для «редактирования» значения
$PATH
(например, «добавлять папку, только если она еще не существует» или «удалять эту папку»).Чтобы проверить, каким будет путь при следующем входе в систему, используйте
telnet localhost
(илиtelnet 127.0.0.1
). Затем он запросит ваше имя пользователя и пароль.Это дает вам новую оболочку входа в систему (т. Е. Совершенно новую оболочку, которая не наследует ничего от текущей среды).
Вы можете проверить значение
$PATH
там и отредактировать свои rc-файлы, пока оно не станет правильным. Это также полезно, чтобы узнать, сможете ли вы снова войти в систему после внесения изменений в важный файл.источник
/bin/bash -i
. Намного меньше хлопот.Как вы добавили эти повторяющиеся пути в переменную PATH? Вы, должно быть, редактировали один из ваших
.
файлов. (.tcshrc
или.bashrc
и т. д. в зависимости от вашей конкретной системы / оболочки). Способ исправить это - снова отредактировать файл и удалить повторяющиеся пути.Если вы не редактировали какие-либо файлы, и вы должны изменить PATH в интерактивном режиме. В этом случае изменения не будут «закрепляться», т.е. если вы откроете другую оболочку или выйдете из системы и снова войдете в систему, изменения автоматически исчезнут.
Обратите внимание, что есть также некоторые общесистемные файлы конфигурации, но вряд ли вы их изменили, поэтому, скорее всего, вы будете изменять файлы в своем личном домашнем каталоге (если вы хотите сделать эти изменения постоянными, как только вы выберете набор путей)
источник
Для простого шаблона копирования и вставки я использую этот фрагмент Perl:
Таким образом, вам не нужно избегать косой черты для оператора замены.
источник