Delete from 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`) с помощью команд терминала?

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

Читайте также:  Set user setting to driver failed windows 10

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

я хочу удалить /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 статус не влияет.

Источник

How to remove all files from a directory?

The closest I’ve gotten is

but that doesn’t work for files that don’t have an extension.

9 Answers 9

Linux does not use extensions. It is up to the creator of the file to decide whether the name should have an extension. Linux looks at the first few bytes to figure out what kind of file it is dealing with.

Читайте также:  Kali linux bluetooth hacking

To remove all non-hidden files* in a directory use:

However, this will show an error for each sub-directory, because in this mode it is only allowed to delete files.

To remove all non-hidden files and sub-directories (along with all of their contents) in a directory use:

* Hidden files and directories are those whose names start with . (dot) character, e.g.: .hidden-file or .hidden-directory/ . Note that, in Bash, if the dotglob option (which is off by default) is set, rm will act on hidden files too, because they will be included when * is expanded by the shell to provide the list of filename arguments.

To remove a folder with all its contents (including all interior folders):

To remove all the contents of the folder (including all interior folders) but not the folder itself:

or, if you want to make sure that hidden files/directories are also removed:

To remove all the «files» from inside a folder(not removing interior folders):

Warning: if you have spaces in your path, make sure to always use quotes.

is equivalent to 2 separate rm -rf calls:

To avoid this issue, you can use ‘ single-quotes ‘ (prevents all expansions, even of shell variables) or » double-quotes » (allows expansion of shell variables, but prevents other expansions):

  • rm — stands for remove
  • -f — stands for force which is helpful when you don’t want to be asked/prompted if you want to remove an archive, for example.
  • -r — stands for recursive which means that you want to go recursively down every folder and remove everything.

Источник

Remove part of path on Unix

I’m trying to remove part of the path in a string. I have the path:

I want to remove the first part /path/to/file/drive and produce the output:

Note: I have several paths in a while loop, with the same /path/to/file/drive in all of them, but I’m just looking for the ‘how to’ on removing the desired string.

I found some examples, but I can’t get them to work:

\2 being the second part of the string and I’m clearly doing something wrong. maybe there is an easier way?

8 Answers 8

If you wanted to remove a certain NUMBER of path components, you should use cut with -d’/’ . For example, if path=/home/dude/some/deepish/dir :

To remove the first two components:

To keep the first two components:

To remove the last two components ( rev reverses the string):

To keep the last three components:

Or, if you want to remove everything before a particular component, sed would work:

Or after a particular component:

It’s even easier if you don’t want to keep the component you’re specifying:

And if you want to be consistent you can match the trailing slash too:

Of course, if you’re matching several slashes, you should switch the sed delimiter:

Note that these examples all use absolute paths, you’ll have to play around to make them work with relative paths.

Источник

Removing a directory from PATH

I’m trying to compile wxWidgets using MingW, and I have cygwin in my path, which seems to conflict. So I would like to remove /d/Programme/cygwin/bin from the PATH variable and I wonder if there is some elegant way to do this.

Читайте также:  Отличие freebsd от windows

The naive approach would be to echo it to a file, remove it manually and source it, but I bet there is better approach to this.

14 Answers 14

There are no standard tools to «edit» the value of $PATH (i.e. «add folder only when it doesn’t already exists» or «remove this folder»). You just execute:

that would be for the current session, if you want to change permanently add it to any .bashrc, bash.bashrc, /etc/profile — whatever fits your system and user needs. However if you’re using BASH, you can also do the following if, let’s say, you want to remove the directory /home/wrong/dir/ from your PATH variable, assuming it’s at the end:

So in your case you may use

If you don’t use an intermediate variable, you need to protect the / characters in the directory to remove so that they aren’t treated as the end of the search text.

The first and third line are there to arrange for every component of the search path to be surrounded by : , to avoid special-casing the first and last component. The second line removes the specified component.

Much simpler one liner.

export PATH=`echo $PATH | tr «:» «\n» | grep -v «anaconda» | tr «\n» «:»`

After considering other options presented here, and not fully understanding how some of them worked I developed my own path_remove function, which I added to my .bashrc :

This ended up pretty close to Gilles’ solution but wrapped up as a bash function which could be easily used on the command line.

It has the advantages that as a bash function it works like a program without needing to be a program on the path, and it doesn’t require any external programs to run, just bash string manipulation.

It appears pretty robust, in particular it doesn’t turn somepath:mypath/mysubpath into somepath/mysubpath :if you run path_remove mypath , which was a problem I had with my previous path_remove function.

An excellent explanation of how bash string manipulation works can be found at the Advanced Bash-Scripting Guide.

So, combining the answers from @gilles and @bruno-a (and a couple of other sed tricks) I came up with this one-liner, which will remove (every) REMOVE_PART from PATH, regardless of whether it occurs at the beginning, middle or end of PATH

It’s a bit unwieldy, but it’s nice to be able to do it in one hit. The ; is used to join together the two separate sed commands:

  • s@:$REMOVE_PART:@:@g (which replaces :$REMOVE_PART: with a single : )
  • s@^:\(.*\):\$@\1@ (which strips off the leading and trailing colons we added with the echo command)

And along similar lines, I’ve just managed to come up with this one-liner for adding a ADD_PART to the PATH, only if the PATH doesn’t already contain it

Change the last part to echo «$PATH:$ADD_PART» if you want to add ADD_PART to the end of PATH instead of to the start.

. or to make this even easier, create a script called remove_path_part with the contents

and a script called prepend_path_part with the contents

and a script called append_path_part with the contents

make them all executable, and then call them like:

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

Источник

Оцените статью