तो, मैं @gilles और @ bruno-a (और कुछ अन्य सीड ट्रिक्स) के उत्तरों को जोड़कर इस एक-लाइनर के साथ आया, जो PATH से (हर) REMOVE_PART को हटा देगा, चाहे वह शुरुआत में हो, PATH का मध्य या अंत
PATH=$(REMOVE_PART="/d/Programme/cygwin/bin" sh -c 'echo ":$PATH:" | sed "s@:$REMOVE_PART:@:@g;s@^:\(.*\):\$@\1@"')
यह थोड़ा बेमानी है, लेकिन इसे एक हिट में करने में सक्षम होना अच्छा है। ;
एक साथ दो अलग-अलग sed आदेशों में शामिल होने के लिए किया जाता है:
s@:$REMOVE_PART:@:@g
(जो :$REMOVE_PART:
एकल के साथ बदलता है :
)
s@^:\(.*\):\$@\1@
(इको कमांड के साथ हमने जो प्रमुख और अनुगामी कॉलोन छोड़े हैं)
और इसी तरह की पंक्तियों के साथ, मैं सिर्फ एक-लाइनर के साथ PATH में ADD_PART जोड़ने के लिए आने में कामयाब रहा हूं, केवल अगर PATH में यह पहले से ही नहीं है
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"
यदि आप प्रारंभ के बजाय PATH के अंत में ADD_PART जोड़ना चाहते हैं तो अंतिम भाग बदलें ।
...
... या इसे और भी आसान बनाने के लिए, remove_path_part
सामग्री के साथ एक स्क्रिप्ट बनाएं
echo ":$PATH:" | sed "s@:$1:@:@g;s@^:\(.*\):\$@\1@"
और एक स्क्रिप्ट prepend_path_part
सामग्री के साथ बुलाया
if echo ":$PATH:" | grep -q ":$1:"; then echo "$PATH"; else echo "$1:$PATH"; fi
और एक स्क्रिप्ट append_path_part
सामग्री के साथ बुलाया
if echo ":$PATH:" | grep -q ":$1:"; then echo "$PATH"; else echo "$PATH:$1"; fi
उन्हें सभी निष्पादन योग्य बनाएं, और फिर उन्हें कॉल करें जैसे:
PATH=$(remove_path_part /d/Programme/cygwin/bin)
PATH=$(prepend_path_part /d/Programme/cygwin/bin)
PATH=$(append_path_part /d/Programme/cygwin/bin)
भले ही, मैं अपने आप को इतना कहना :-)