Então, combinando as respostas de @gilles e @bruno-a (e um par de outros truques sed) eu criei este one-liner, que remove (a cada) REMOVE_PART do PATH, independentemente de ocorrer em o começo, meio ou fim do PATH
PATH=$(REMOVE_PART="/d/Programme/cygwin/bin" sh -c 'echo ":$PATH:" | sed "s@:$REMOVE_PART:@:@g;s@^:\(.*\):\$@@"')
É um pouco complicado, mas é bom poder fazer isso em apenas um hit. O ;
é usado para unir os dois comandos separados do sed:
-
s@:$REMOVE_PART:@:@g
(que substitui :$REMOVE_PART:
por um único :
)
-
s@^:\(.*\):\$@@
(que remove os dois pontos iniciais e finais que adicionamos com o comando echo)
E ao longo de linhas similares, eu apenas consegui criar este one-liner para adicionar um ADD_PART ao PATH, somente se o PATH ainda não o contiver
PATH=$(ADD_PART="/d/Programme/cygwin/bin" sh -c 'if echo ":$PATH:" | grep -q ":$ADD_PART:"; then echo "$PATH"; else echo "$ADD_PART:$PATH"; fi')
Altere a última parte para echo "$PATH:$ADD_PART"
se você quiser adicionar ADD_PART ao final do PATH em vez de ao início.
...
... ou para tornar isso ainda mais fácil, crie um script chamado remove_path_part
com o conteúdo
echo ":$PATH:" | sed "s@:$1:@:@g;s@^:\(.*\):\$@@"
e um script chamado prepend_path_part
com o conteúdo
if echo ":$PATH:" | grep -q ":$1:"; then echo "$PATH"; else echo "$1:$PATH"; fi
e um script chamado append_path_part
com o conteúdo
if echo ":$PATH:" | grep -q ":$1:"; then echo "$PATH"; else echo "$PATH:$1"; fi
torne-os todos executáveis e, em seguida, chame-os como:
-
PATH=$(remove_path_part /d/Programme/cygwin/bin)
-
PATH=$(prepend_path_part /d/Programme/cygwin/bin)
-
PATH=$(append_path_part /d/Programme/cygwin/bin)
Legal, mesmo se eu disser assim: -)