मछली में $ PATH चर से एक रास्ता कैसे निकालें?


20

जब भी मैं कमांड पूरा करने का उपयोग करने की कोशिश करता हूं, मैं डेबियन में मछली के खोल के रूप में और हाल ही में (कुछ उन्नयन के बाद) मछली का उपयोग कर रहा हूं:

set: No such file or directory
set: Could not add component /usr/lib/x86_64-linux-gnu/libfm to PATH.
set: No such file or directory

इसे चलाना:

echo $PATH 

मुझे यह देता है:

/usr/lib/x86_64-linux-gnu/libfm /usr/local/bin /usr/bin /bin /usr/local/games /usr/games

मेरे सिस्टम में कोई नहीं है /usr/lib/x86_64-linux-gnu/libfm, इसलिए मैं समझता हूं कि मछली क्यों शिकायत कर रही है, लेकिन मुझे नहीं पता कि मैं अपने $PATHचर से इस रास्ते को कैसे हटा सकता हूं ।

क्या किसी को पता है कि मैं यह कैसे कर सकता हूं?


grep -R /usr/lib/x86_64-linux-gnu/libfm ~/.config/fish /usr/share/fish??
ग्लेन जैकमैन

$ grep -R / usr / lib / x86_64-linux-gnu / libfm ~ / .config / fish / usr / share / fish /home/superuser/.config/fish_fish_history:grep -R / usr / lib / x86_64-64। linux-gnu / libfm ~ / .config / मछली / usr / शेयर / मछली
tomekK

जवाबों:


33

$ PATH वैरिएबल सेट करने का 'मछली' तरीका वास्तव में उपयोग करना है set --universal fish_user_paths $fish_user_paths /new/path/here। तब $ fish_user_paths वास्तव में एक नया सत्र शुरू होने पर $ PATH चर के लिए तैयार किया जाता है। $ PATH प्रलेखन वर्तमान में आपको यह नहीं बताता कि इसे कैसे हटाया जाए।

मछली में प्रत्येक चर वास्तव में एक सूची (सरणी) है, और आप आसानी से एक सूचकांक / इंडिस का उपयोग करके प्रत्येक आइटम को सीधे एक्सेस कर सकते हैं। echo $fish_user_pathsसूची में हर आइटम का एक स्थान सीमांकित संस्करण प्रिंट करेगा, अनुवाद फ़ंक्शन के साथ रिक्त स्थान को नई रेखा बना देगा echo $fish_user_paths | tr " " "\n"और फिर उस पर संख्या रेखा फ़ंक्शन के साथ लाइन नंबर डाल देगा echo $fish_user_paths | tr " " "\n" | nl। इसके बाद इसे हटा दें set --erase --universal fish_user_paths[5]। आपको इसका उपयोग करना चाहिए --universalया यह किसी भी नए सत्र में काम नहीं करेगा।

यदि किसी के पास समय है, तो कृपया इस उदाहरण के साथ रेपो में पीआर सबमिट करें। मैंने यहां एक मुद्दा खोला ।

tldr;

  1. echo $fish_user_paths | tr " " "\n" | nl // जिसको आप हटाना चाहते हैं उसका नंबर प्राप्त करें, जैसे कि 5 वां
  2. set --erase --universal fish_user_paths[5] // 5 वें मार्ग को सार्वभौमिक रूप से मिटा दें ताकि यह नए सत्रों में बना रहे

यह इतना रहस्यमय क्यों है? क्या यह एक विशेषता नहीं है और इसे दस्तावेज़ में जोड़ा जाना चाहिए ताकि लोगों को Google के लिए और यहाँ समाप्त न होना पड़े? ओह अच्छा ..
Pär Nils Amsen

मुझे लगता है कि अगर हम @ clozach का उत्तर यहां superuser.com/a/1212305/30982 से लेते हैं , जो कि ऐडपैथ्स () और रिमेपाथ () फ़ंक्शन है, और एक पीआर खोलें तो यह जोड़ा जाने वाला पहला कदम होगा। अधिकांश अनुरक्षकों के साथ काम करने के लिए बहुत अच्छा है, एक मुझे बहुत बुरा लगता है, लेकिन कुल मिलाकर मुझे लगता है कि हमारे पास एक अच्छा मौका होगा। तो यह हमारा अगला कदम है।
एलिजा लिन

9

जैसा कि एलिजा कहती हैं, सबसे अच्छा अभ्यास fish_user_pathsवैश्विक के बजाय संशोधित करना है PATH। Google को कभी भी इससे बचने के लिए फिर से…

  1. कुछ ऐसे फ़ंक्शन बनाएं जो केवल संशोधित करते हैंfish_user_paths
  2. दोनों फंक्शन्स को ऑटोलॉडिंग बनाएं

उपयोगकर्ता पथों में जोड़ने के लिए:

function addpaths
    contains -- $argv $fish_user_paths
       or set -U fish_user_paths $fish_user_paths $argv
    echo "Updated PATH: $PATH"
end

किसी उपयोगकर्ता द्वारा पथ को निकालने के लिए यदि वह मौजूद है (को आंशिक श्रेय इस ):

function removepath
    if set -l index (contains -i $argv[1] $PATH)
        set --erase --universal fish_user_paths[$index]
        echo "Updated PATH: $PATH"
    else
        echo "$argv[1] not found in PATH: $PATH"
    end
end

और हां, उन्हें ऑटोलिडिंग बनाने के लिए :

funcsave addpaths; funcsave removepath

उदाहरण उपयोग:

> addpaths /etc /usr/libexec
Modifying PATH: /usr/local/bin /usr/bin /bin /usr/sbin /sbin
Updated PATH: /etc /usr/libexec /usr/local/bin /usr/bin /bin /usr/sbin /sbin

> removepath /usr/libexec
Modifying PATH: /etc /usr/libexec /usr/local/bin /usr/bin /bin /usr/sbin /sbin
Updated PATH: /etc /usr/local/bin /usr/bin /bin /usr/sbin /sbin

नोट: मैंने अभी पता लगाया है कि यह दृष्टिकोण किसी अन्य तंत्र के माध्यम से जोड़े गए मार्ग को नहीं हटाएगा; यदि आप हर बार नया टर्मिनल सत्र खोलते हैं, तो कुछ डॉट-फ़ाइल सफाई क्रम में हो सकती है।
19

यह बहुत अच्छा है, बस मेरे स्थानीय में जोड़ा गया!
एलिजा लिन

3

यह पथ 6 को अंतिम पथ से मिटा देना चाहिए:

set -e PATH[6..-1]

-ई झंडे को मिटा दिया जाता है। देखते हैं help set


यह केवल वर्तमान सत्र के लिए काम करेगा
डैनियल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.