Tak więc, łącząc odpowiedzi z @ gilles i @ bruno-a (i kilku innych sztuczek sed) wymyśliłem ten jednowierszowy, który usunie (każdy) REMOVE_PART z PATH, niezależnie od tego, czy występuje na początku, środek lub koniec ŚCIEŻKI
PATH=$(REMOVE_PART="/d/Programme/cygwin/bin" sh -c 'echo ":$PATH:" | sed "s@:$REMOVE_PART:@:@g;s@^:\(.*\):\$@\1@"')
To trochę nieporęczne, ale fajnie jest móc to zrobić za jednym razem. ;
Służy do łączenia ze sobą dwóch oddzielnych sed polecenia:
s@:$REMOVE_PART:@:@g
(który zastępuje :$REMOVE_PART:
jednym :
)
s@^:\(.*\):\$@\1@
(który usuwa główne i końcowe dwukropki, które dodaliśmy za pomocą polecenia echo)
I w podobny sposób właśnie udało mi się wymyślić ten jeden wiersz do dodawania ADD_PART do ŚCIEŻKI, tylko jeśli ŚCIEŻKA jeszcze go nie zawiera
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')
Zmień ostatnią część na, echo "$PATH:$ADD_PART"
jeśli chcesz dodać ADD_PART na końcu ŚCIEŻKI zamiast na początku.
...
... lub aby było to jeszcze łatwiejsze, utwórz skrypt wywoływany remove_path_part
z zawartością
echo ":$PATH:" | sed "s@:$1:@:@g;s@^:\(.*\):\$@\1@"
oraz skrypt wywoływany prepend_path_part
z zawartością
if echo ":$PATH:" | grep -q ":$1:"; then echo "$PATH"; else echo "$1:$PATH"; fi
oraz skrypt wywoływany append_path_part
z zawartością
if echo ":$PATH:" | grep -q ":$1:"; then echo "$PATH"; else echo "$PATH:$1"; fi
uczyń je wszystkimi wykonywalnymi, a następnie wywołać je w następujący sposób:
PATH=$(remove_path_part /d/Programme/cygwin/bin)
PATH=$(prepend_path_part /d/Programme/cygwin/bin)
PATH=$(append_path_part /d/Programme/cygwin/bin)
Zgrabnie, nawet jeśli sam tak mówię :-)