- Удаление каталога из PATH
- Как удалить путь из системного пути (`$PATH`) с помощью команд терминала?
- 6 ответов
- Переменная PATH в Linux
- Переменная PATH в Linux
- Выводы
- Удалить путь из вывода команды find
- 8 ответов
- Удалите лишние пути из переменной $ PATH
- Linux: удалить избыточные пути из переменной $ PATH
- Будет ли это работать во всех известных человеку оболочках?
Удаление каталога из 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`) с помощью команд терминала?
Я добавил путь к каталогу к системному пути ( $PATH запустив,
Теперь мой путь выглядит так,
я хочу удалить /home/avinash/Desktop/raj из переменной системного пути с помощью команды (как команда экспорта делает при добавлении пути).
6 ответов
Бег export PATH=$PATH:/. не устанавливает ваш PATH общесистемный. Это просто переменная оболочки. Запустите новую оболочку и BOOM, она исчезла. Очевидно, если вы добавили это в
/.bashrc (или другой файл начальной загрузки среды) вам придется отменить это изменение, но здесь это не похоже на вашу проблему.
Если вы не хотите запускать новую оболочку, вы можете установить ее, удалив вручную, с помощью:
В вашей текущей оболочке (вашей текущей сессии gnome-терминала) вы можете сделать это используя:
удаляет самое короткое совпадение $substring от задней части $string ,
Проверьте манипуляции со строками для получения дополнительной информации.
Один грязный хак
- разделите каждый каталог в вашем PATH по строке, используя tr
- удалите то, что вы не хотите (соответствие пути «raj»), используя grep -v , а также
- свернуть обратно в длинную строку «:» с помощью 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 статус не влияет.
Источник
Переменная PATH в Linux
Когда вы запускаете программу из терминала или скрипта, то обычно пишете только имя файла программы. Однако, ОС 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 и как добавлять к её значению новые пути поиска исполняемых и связанных с ними файлов. Как видите, всё делается достаточно просто. Таким образом вы можете добавить столько папок для поиска и хранения исполняемых файлов, сколько вам требуется.
Источник
Удалить путь из вывода команды find
У меня есть сценарий bash для развертывания кода из бета-среды в производственную среду, но в настоящее время я должен добавить список файлов в файл txt manaully, а иногда я пропустил некоторые из них. В основном мой сценарий развертывания cat /loops копирует файлы. (экспорт /импорт db также, но это не актуально..lol)
В любом случае, я хотел бы использовать команду find , чтобы сгенерировать список файлов, измененных за последние 14 дней. Проблема в том, что мне нужно отключить путь ./ , чтобы скрипт развертывания работал.
Вот пример использования команды find:
найти. -type f -mtime -14> deploy.txt
Вот строка, в которой котята deploy.txt в моем сценарии развертывания:
Любая идея, как это сделать, используя скрипты bash?
8 ответов
Вы можете использовать опцию командной строки -printf с помощью %f для печати только имени файла без какой-либо информации о директории
или вы можете использовать sed, чтобы просто удалить ./
./ должен быть безвредным. Большинство программ будут обрабатывать /foo/bar и /foo/./bar как эквивалент. Я понимаю, что это выглядит не очень хорошо, но, основываясь на том, что вы опубликовали, я не вижу причин, по которым это может привести к сбою вашего сценария.
Если вы действительно хотите снять его, sed , вероятно, самый чистый способ:
Если вы используете систему с GNU find (например, большинство систем Linux), вы можете сделать это одним выстрелом с помощью find -printf
%P возвращает полный путь к каждому найденному файлу, минус путь, указанный в командной строке, вплоть до первого слэш. Это сохранит любые подкаталоги в структуре вашего каталога.
Зачем вам нужно отключить ./ ? Это допустимо иметь в пути. Итак,
Но если вы хотите удалить имя каталога в find, вы можете использовать аргумент %P для -printf
Обратите внимание на первую пустую строку! Если вы хотите избежать этого, используйте -mindepth 1
«find -printf» не будет работать на FreeBSD, потому что find не имеет такой опции. В этом случае AWK может помочь. Он возвращает имя ($ NF), поэтому он может работать на любой глубине.
PS: взято из книги D.Tansley «Linux and Unix shell programming»
У вас есть несколько вариантов. Вы можете использовать опцию -printf в поиске, чтобы распечатывать только имя файла, или вы можете использовать инструмент, например sed, чтобы просто вырезать —- +: = 1 =:. + —-
Быстрое решение, если я правильно понимаю вопрос, использует cut на выходе find :
Это приведет к тому, что первая строка будет помечена символами из каждой строки результата (в вашем случае ./ ). Вероятно, это не лучшее решение, но работает в вашем сценарии.
sed идеально подходит для такого рода вещей.
Я не знаю, о каких именах мы говорим, но что-либо с пробелами или символами новой строки ставит под угрозу большинство решений.
Мое предложение состояло в том, чтобы использовать расширение параметра оболочки для разметки символов из каждого имени файла:
Если вам действительно нравятся трубы, вы можете использовать «безопасный» разделитель, например null, с xargs для получения каждого имени файла:
Источник
Удалите лишние пути из переменной $ PATH
Я 6 раз определял один и тот же путь в переменной $ PATH.
Я не выходил из системы, чтобы проверить, работает ли это.
Как удалить дубликаты?
Переменная $ PATH выглядит так:
Как мне сбросить его на
Вы просто выполняете:
это будет для текущего сеанса, если вы хотите изменить навсегда, добавьте его в любой .bashrc, bash.bashrc, / etc / profile — все, что подходит вашей системе и потребностям пользователя.
Примечание: это для Linux. Мы проясним это для начинающих программистов. (`, ‘) Не пытайтесь установить = this.
/ .bashrc), а не на /etc/bash.bashrc. Если вы хотите изменить ПУТЬ для конкретного пользователя, отредактируйте его в / home / / .bashrc файле. /etc/bash.bashrc применяется ко всем пользователям.
Если вы используете Bash, вы также можете сделать следующее, если, скажем, вы хотите удалить каталог /home/wrong/dir/ из своей PATH переменной:
Linux: удалить избыточные пути из переменной $ PATH
Linux From Scratch имеет эту функцию в / etc / profile
Это предназначено для использования с этими функциями для добавления к пути, чтобы вы не делали это повторно:
Простое использование — просто указать pathremove путь к каталогу для удаления, но имейте в виду, что он должен точно совпадать:
Это удалит каждый экземпляр этого каталога из вашего пути.
Если вам нужен каталог на вашем пути, но без дублирования, вы можете просто использовать одну из других функций, например — для вашего конкретного случая:
Но, если удобочитаемость не является проблемой, на этом этапе вам лучше просто сделать:
Будет ли это работать во всех известных человеку оболочках?
Я полагаю , выше , чтобы работать в sh , dash и , по bash крайней мере. Я был бы удивлен, узнав, что это не работает csh , fish’, or кш. Я сомневаюсь, что это будет работать в командной оболочке Windows или Powershell.
Если у вас есть Python, следующая команда должна делать то, что вам прямо запрошено (то есть удалять избыточные пути):
Однострочный (чтобы обойти многострочные проблемы):
Вышесказанное удаляет более поздние избыточные пути. Чтобы удалить более ранние избыточные пути, используйте индекс перевернутого списка и снова переверните его:
Источник