Böylece, @ gilles ve @ bruno-a (ve diğer birkaç püf noktası) 'nın cevaplarını birleştirerek, başlangıçta meydana gelip gelmediğine bakılmaksızın (her) REMOVE_PART'ı PATH'dan kaldıracak olan bu bir astarla geldim. PATH'in ortası veya sonu
PATH=$(REMOVE_PART="/d/Programme/cygwin/bin" sh -c 'echo ":$PATH:" | sed "s@:$REMOVE_PART:@:@g;s@^:\(.*\):\$@\1@"')
Biraz hantal, ama tek bir vuruşta yapabilmek güzel. ;
Birlikte iki ayrı sed komutları katılmak için kullanılır:
s@:$REMOVE_PART:@:@g
( :$REMOVE_PART:
tek olanla değiştirilir :
)
s@^:\(.*\):\$@\1@
(echo komutuyla eklediğimiz önde gelen ve sondaki iki nokta üstünden çıkarır)
Ve benzer hatlar boyunca, PATH’e bir ADD_PART eklemek için bu tek-liner ile geldim, ancak PATH zaten içermiyorsa
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')
echo "$PATH:$ADD_PART"
ADD_PART'ı başlatmak yerine PATH'nin sonuna eklemek istiyorsanız son parçayı değiştirin .
...
... ya da bunu daha da kolaylaştırmak remove_path_part
için içeriği olan bir script oluşturun.
echo ":$PATH:" | sed "s@:$1:@:@g;s@^:\(.*\):\$@\1@"
ve prepend_path_part
içeriği ile çağırılan bir betik
if echo ":$PATH:" | grep -q ":$1:"; then echo "$PATH"; else echo "$1:$PATH"; fi
ve append_path_part
içeriği ile çağırılan bir betik
if echo ":$PATH:" | grep -q ":$1:"; then echo "$PATH"; else echo "$PATH:$1"; fi
hepsini çalıştırılabilir yap ve sonra onları şöyle çağır:
PATH=$(remove_path_part /d/Programme/cygwin/bin)
PATH=$(prepend_path_part /d/Programme/cygwin/bin)
PATH=$(append_path_part /d/Programme/cygwin/bin)
Düzgün, söylesem bile kendim :-)