Как мне добавить подкаталог bin первого каталога в GOPATH в PATH?

Этот пост был интересен тем, что я хотел удалить его из / var / cache в Ubuntu 15.10 для улучшения дискового пространства, вот что я нашел:

/ var / cache / apt файлы кеша удаляются после запуска sudo apt-get clean, однако структура каталогов остается, что не проблема, если вы ищете улучшения дискового пространства; 'apt-get clean' следует запускать в последнюю очередь, если вы хотите улучшить дисковое пространство с помощью apt-get [auto] remove / [auto] clean и т. Д.

Что касается всего остального в каталоге, я не мог Я больше не согласен с «Тор Валамо» и его объяснением.Это кеш, система и приложения, использующие кеш, должны иметь возможность регенерировать все, что они там создали. У вас просто незначительные накладные расходы на производительность, так как кеш регенерируется из приложения в приложение

. Говоря, что каждая система может не соответствовать этому принципу, проведите некоторое тестирование, попробуйте переместить все в каталоге кеша в новое место и проверьте, и все ваши приложения работают до окончательного удаления кеша.

4
14.02.2019, 07:09
3 ответа
PATH="$PATH:${GOPATH%%:*}/bin"

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

Если удалять нечего, ничего не удаляется, поэтому вы получаете единственный путь, если он только один.

3
27.01.2020, 20:48

Вы можете использовать:

PATH="$PATH:${GOPATH%%:*}/bin"

или

PATH="$PATH:${GOPATH%:*}/bin"

Оба будут работать, потому что может быть не более одного :.

Деталь после :будет удалена. Таким образом, в первом случае он удалит второй каталог, а во втором случае не будет такого шаблона, как :*, поэтому имя каталога не изменится.

6
27.01.2020, 20:48

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

IFS=: read -ra arr_gopath <<< "$GOPATH"
PATH="$PATH:${arr_gopath[0]/%//bin}"

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

PATH="$PATH:$(IFS=:; echo "${arr_gopath[*]/%//bin}")"

В обоих случаях (разделение, объединение )мы устанавливаем внутренний разделитель полей(IFS)на символ двоеточия :. Подстановка ${var/%//bin}добавляет /binв конец выбранной переменной.

Тем не менее, если вы хотите добавить все компонентыGOPATHс суффиксом /binк PATH, то следующее будет проще и не требует массивов. Однако требуется, чтобы GOPATHне было пустым:

PATH="$PATH:${GOPATH//://bin}/bin"

(${var//pattern/subst}заменяет все вхождения patternна subst, тогда как ${var/pattern/subst}, использованное выше, заменяет только первое.)

1
27.01.2020, 20:48

Теги

Похожие вопросы