1

Все в заголовке. Я знаю, как добавить новый путь в переменную окружения PATH но я хотел бы сделать его рекурсивным, автоматически добавляя папки /bin всех моих будущих проектов.

Что-то вроде замены этого:

PATH=$PATH:~/projects/project1/bin
PATH=$PATH:~/projects/project2/bin
..
PATH=$PATH:~/projects/projectN/bin

Этим:

PATH=$PATH:~/projects/*/bin

Проблема: каждый раз, когда я вставляю * , это не распознается системой. Вы видите способ сделать это?

Я работаю над Ubuntu 16.04

1 ответ1

0

Чтобы выполнить что-то подобное, вам нужно поместить код в так называемую подкоманду в большинстве оболочек. В Bash его обозначение - $(...some command...) .

Подход

$ find ~ -iregex ".*project.*/bin" | xargs | sed 's/ /:/g'

Этот вкладыш создаст список каталогов, в которых будет находиться подкаталог /bin . Он не идеален на 100%, поскольку не может обрабатывать каталоги, в именах которых есть пробелы, но если вы знаете, что ваша ситуация соответствует этому правилу, вы можете использовать его.

Используя приведенный выше фрагмент, вы создадите свой $PATH следующим образом:

PATH=$PATH:$(find ~ -iregex ".*project.*/bin" | xargs | sed 's/ /:/g')

пример

В этом примере я собираюсь использовать $MYPATH в качестве замены для $PATH . Для начала у нас есть несколько каталогов, уже содержащихся в $MYPATH .

$ MYPATH=/path1/bin:/path2/bin
$ echo $MYPATH
/path1/bin:/path2/bin

Теперь, чтобы добавить все каталоги ~/project*/bin в $MYPATH:

$ MYPATH=$MYPATH:$(find ~ -iregex ".*project.*/bin" | xargs | sed 's/ /:/g')
$ echo $MYPATH
/path1/bin:/path2/bin:/Users/slm/project1/bin:/Users/slm/project2/bin:/Users/slm/project3/bin

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