1

Иногда, обычно при установке пакетов с помощью brew , я хочу отключить / удалить определенные части моего пути, а затем восстановить их. Я не смог найти простой способ сделать это, и хотя я мог бы написать свой собственный скрипт bash для этого, мне интересно, есть ли более простой способ.

Желаемое поведение (или что-то подобное):

$ echo $PATH
/Users/mchenja/anaconda/bin:/usr/local/bin:/(and so on)
$ changepath "brew"; echo $PATH
/usr/local/bin:/(and so on)
$ changepath "anaconda"; echo $PATH
/Users/mchenja/anaconda/bin:/usr/local/bin:/(and so on)

Здесь "brew" и "anaconda" - это просто определенные пользователем ключевые слова для управления сохраненным путем.

Bash предлагает встроенный метод сделать это? А как насчет внешнего дополнения?

3 ответа3

3

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

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

DEFAULTPATH="$PATH"
alias dp="PATH=\"$DEFAULTPATH\""
alias ap="PATH=\"/Users/mchenja/anaconda/bin:$DEFAULTPATH\""
alias bp="PATH=\"/usr/local/bin:$DEFAULTPATH\""

Теперь, во время выполнения, вы можете просто набрать ap , bp или dp чтобы переключаться между вашими anaconda, brew и стандартными PATH соответственно.

1

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

1 prompt> X=1
2 prompt> X=2 some_command arg1 arg2
3 prompt> echo $X

переменная X будет равна 2 внутри some_command, но вернется к X = 1 в строке 3. Таким образом, вы можете временно изменить PATH только для одной команды, чтобы удалить совпадающую строку префикса (при условии, что ваше требование так же просто, как это), например,

1 prompt> PATH=${PATH#/Users*:} brew ...args...

Это удалит из PATH префикс, начинающийся с «/Users», заканчивающийся на первый «:». Например, вместо /Users/foo/bar:/usr/bin/.... вас будет просто /usr/bin/.... Является ли это проще, чем псевдонимы, сомнительно, но это может быть включено в ваши псевдонимы / функции / скрипты. Основным преимуществом является то, что он динамически изменяет ваш PATH с того значения, на котором он в данный момент установлен; но это и главный недостаток :-)

1

Создайте отдельные файлы с нужной переменной PATH и сохраните их в каталоге в вашей домашней папке. Пример:

cat ~/ch_path.d/brew

PATH="/usr/local/bin:/(and so on)"
export PATH

Тогда вы можете найти любой путь, который вы хотите

source ~/ch_path.d/brew

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .