Каков самый элегантный способ удалить путь из переменной $PATH в Bash?



или в более общем плане, как удалить элемент из списка, разделенного двоеточием, в переменной среды Bash?



Я думал, что видел простой способ сделать это много лет назад, используя более продвинутые формы расширения переменной Bash, но если это так, я потерял его из виду. Быстрый поиск Google обнаружил удивительно мало релевантных результатов и ни одного, что я бы назвал "простым" или "элегантным". Например, два метода с использованием sed и awk, соответственно:



PATH=$(echo $PATH | sed -e 's;:?/home/user/bin;;' -e 's;/home/user/bin:?;;')
PATH=!(awk -F: '{for(i=1;i<=NF;i++){if(!($i in a)){a[$i];printf s$i;s=":"}}}'<<<$PATH)


ничего не делает прямолинейно существовать? Есть ли что-нибудь аналогичное функции split() в Bash?



обновление:

Похоже, мне нужно извиниться за мой намеренно неопределенный вопрос; я был менее заинтересован в решении конкретного случая использования, чем в провоцировании хорошей дискуссии. К счастью, я получил его!



есть некоторые очень умные методы здесь. В конце концов, я добавил следующие три функции в моем арсенале. Магия происходит в path_remove, который основан в основном на умном использовании Мартина Йорка awkпеременная RS.



path_append ()  { path_remove ; export PATH="$PATH:"; }
path_prepend () { path_remove ; export PATH=":$PATH"; }
path_remove () { export PATH=`echo -n $PATH | awk -v RS=: -v ORS=: ' != "''"' | sed 's/:$//'`; }


единственный реальный круфт там-это использование sed чтобы удалить конечную двоеточие. Учитывая, насколько проста остальная часть решения Мартина, я вполне готов жить с этим!





связанный вопрос: Как я могу манипулировать элементами $PATH в сценариях оболочки?

478   0  

Comments

    Ничего не найдено.