Aus den Antworten von @gilles und @ bruno-a (und ein paar anderen Sed-Tricks) habe ich diesen Einzeiler entwickelt, der (jeden) REMOVE_PART aus PATH entfernt, unabhängig davon, ob er zu Beginn auftritt. Mitte oder Ende von PATH
PATH=$(REMOVE_PART="/d/Programme/cygwin/bin" sh -c 'echo ":$PATH:" | sed "s@:$REMOVE_PART:@:@g;s@^:\(.*\):\$@\1@"')
Es ist ein bisschen unhandlich, aber es ist schön, es mit einem Schlag schaffen zu können. Mit ;
dem werden die beiden getrennten sed-Befehle zusammengefügt:
s@:$REMOVE_PART:@:@g
(die :$REMOVE_PART:
mit einem einzigen ersetzt :
)
s@^:\(.*\):\$@\1@
(Dies entfernt die führenden und nachfolgenden Doppelpunkte, die wir mit dem Befehl echo hinzugefügt haben.)
In ähnlicher Weise habe ich es gerade geschafft, diesen Einzeiler für das Hinzufügen eines ADD_PART zum PATH zu entwickeln, nur wenn der PATH ihn noch nicht enthält
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')
Ändern Sie den letzten Teil in, echo "$PATH:$ADD_PART"
wenn Sie ADD_PART am Ende von PATH anstatt am Anfang hinzufügen möchten.
...
... oder um dies noch einfacher zu machen, erstellen Sie ein Skript, das remove_path_part
mit den Inhalten aufgerufen wird
echo ":$PATH:" | sed "s@:$1:@:@g;s@^:\(.*\):\$@\1@"
und ein Skript prepend_path_part
mit dem Inhalt aufgerufen
if echo ":$PATH:" | grep -q ":$1:"; then echo "$PATH"; else echo "$1:$PATH"; fi
und ein Skript append_path_part
mit dem Inhalt aufgerufen
if echo ":$PATH:" | grep -q ":$1:"; then echo "$PATH"; else echo "$PATH:$1"; fi
mache sie alle ausführbar und rufe sie dann wie folgt auf:
PATH=$(remove_path_part /d/Programme/cygwin/bin)
PATH=$(prepend_path_part /d/Programme/cygwin/bin)
PATH=$(append_path_part /d/Programme/cygwin/bin)
Ordentlich, auch wenn ich es selbst sage :-)